【发布时间】:2023-01-12 01:48:00
【问题描述】:
我有一个这样的字典列表, 但我们可能有更多的深度,所以更多的 id 和 pids ...
WIDGETS = [
{"id": 1, "pid": 0, "url": "/upload"},
{"id": 2, "pid": 0, "url": "/entry"},
{"id": 3, "pid": 0, "url": "/report"},
{"id": 4, "pid": 3, "url": "/reppremium"},
{"id": 5, "pid": 4, "url": "/reppremiumsum"},
{"id": 6, "pid": 4, "url": "/reppremiumfull"},
{"id": 7, "pid": 3, "url": "/repcommission"},
{"id": 8, "pid": 7, "url": "/repcommissionsum"},
{"id": 9, "pid": 7, "url": "/repcommissionfull"},
{"id": 10, "pid": 3, "url": "/repportions"},
{"id": 11, "pid": 10, "url": "/repportionssum"},
{"id": 12, "pid": 10, "url": "/repportionsfull"},
{"id": 13, "pid": 0, "url": "/adduser"},
{"id": 14, "pid": 0, "url": "/exportdb"},
{"id": 15, "pid": 0, "url": "/importdb"},
]
我想将其转换为 HTML 嵌套/多级下拉列表,如下所示:
main menu -> /upload
/report -> /reppremium -> /reppremiumsum
-> /reppremiumfull
-> /repcommission -> /repcommissionsum
-> /repcommissionfull
-> /repportions -> /repportionssum
-> /repportionsfull
/adduser
/exportdb
/importdb
我已经尝试了一些代码,但它不能正常工作,因为我知道它需要一个递归函数......
def get_widgets(widgets,text='',pid=0,text_m=''):
childs = get_childs(pid,widgets)
for child in childs:
pidn = child['id']
n = get_childs(pidn,widgets)
print(n,'for id',pidn)
if len(n) != 0:
text += f'''
<li class="nav-item dropend">
<a class="nav-link dropdown-toggle" href="{ child['url'] }" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{ child['url'] }
</a>
<ul class="dropdown-menu nav nav-pills flex-column mb-sm-auto mb-0 align-items-center align-items-sm-start">
'''
pid_new = child['id']
get_widgets(widgets,text,pid_new)
text += '</ul></li>'
print(text)
text_m += text
else:
#print(n,'n')
text += f'''
<li class="nav-item">
<a class="nav-link dropdown-item" href="{ child['url'] }">{ child['url'] }</a>
</li>
'''
text_m += text
text = ''
return tex
我希望代码显示一个 html 多级下拉菜单...但由 WIDGETS 填充...
【问题讨论】:
-
你能显示你期望的输入的 HTML 输出吗?
标签: python html recursion drop-down-menu nested