我正在使用python和Flask、Bootstrap和JavaScript創建一個web應用程序。我有一個鄰接表,由flask_sqlalchemy的應用程序訪問。我已經能夠從數據庫中提取數據,并將鄰接表轉換為Python字典列表,下面是結果列表的一個示例:
[{'id': 1, 'name': 'External sector', 'parent_id': 0},
{'id': 3, 'name': 'Capital and financial markets', 'parent_id': 0},
{'id': 77, 'name': 'Credit indicators', 'parent_id': 0},
{'id': 15, 'name': 'Economic activity', 'parent_id': 0},
{'id': 17, 'name': 'Monetary indicators', 'parent_id': 0},
{'id': 30, 'name': 'Regional economy', 'parent_id': 0},
{'id': 114, 'name': 'International economy', 'parent_id': 0},
{'id': 157, 'name': 'National private financial system', 'parent_id': 0},
{'id': 176, 'name': 'Financial Stability', 'parent_id': 0},
{'id': 222, 'name': 'Financial Inclusion', 'parent_id': 0},
{'id': 2, 'name': 'Exchange rates', 'parent_id': 1},
{'id': 242, 'name': 'Controlled or free rates', 'parent_id': 2},
{'id': 243, 'name': 'Floating rates', 'parent_id': 2},
{'id': 244, 'name': 'Enabled series', 'parent_id': 3},
{'id': 4, 'name': 'Financial market indicators', 'parent_id': 3},
{'id': 245, 'name': 'Interest rate', 'parent_id': 4},
{'id': 5, 'name': 'Time deposits', 'parent_id': 3},
{'id': 6, 'name': '(CDB/RDB)', 'parent_id': 5},
{'id': 246, 'name': 'Time deposits referred in preset rates', 'parent_id': 6},
{'id': 247,
'name': 'Time deposits referred in postset rates',
'parent_id': 6},
...
函數:這個函數將列表中的條目轉換成一個html格式的列表
output = ''
#NOTE: the node variable was defined earlier and it is the list representing the adjacency list.
def build_node(node):
global output
output += '<li><a>'+node['name']+'</a>'
build_nodes(node['id'])
output += '</li>'
def build_nodes(node_parent_id):
global output
subnodes = [node for node in nodes if node['parent_id'] == node_parent_id]
if len(subnodes) > 0 :
output += '<ul>'
[build_node(subnode) for subnode in subnodes]
output += '</ul>'
build_nodes(0) # Pass in None as a parent id to start with top level nodes
print(output)
代碼輸出工作得很完美(你可以在這個pastebin https://pastebin . com/ESX C1 Cr中找到輸出)。
如何使用Bootstrap使這個輸出可折疊?我試過把class = & quot可折疊& quot在& lta & gt& lt/a & gt;標簽,但這不起作用。
注意:我也可以從數據庫中提取信息到一個嵌套的dixt格式,它是這樣的:
{'id': 0,
'name': 'Root node',
'parent_id': 0,
'sub': [{'id': 1,
'name': 'External sector',
'parent_id': 0,
'sub': [{'id': 2,
'name': 'Exchange rates',
'parent_id': 1,
'sub': [{'id': 242,
'name': 'Controlled or free rates',
'parent_id': 2,
'sub': []},
{'id': 243,
'name': 'Floating rates',
'parent_id': 2,
'sub': []},
{'id': 532,
'name': 'Real and effective exchange rate indices',
'parent_id': 2,
'sub': []},
{'id': 533,
'name': 'Foreign exchange and wage indicators',
'parent_id': 2,
'sub': []},
{'id': 548,
'name': 'Average of period',
'parent_id': 2,
'sub': []},
{'id': 549,
'name': 'End of period',
'parent_id': 2,
'sub': []}]},
{'id': 353,
我試圖用Flask將這個dict作為JSON字符串傳遞到我的頁面,并使用bootstrap-treeview構建樹,但是沒有成功。
上一篇c# json轉換性能
下一篇vue 表格加載數據