我想创建动态菜单,意思是从表中加载菜单
这是我的django管理面板中的菜单设置
下面是我如何创建或设置菜单
这就是目前的结果
def process_request(self, request):
html_menu = ''
menus = menu.Menu.objects.order_by('order_number').all()
used_ids = []
for m in menus:
print(">>>>>> " , m, m.children_menu.all())
if m.target_url == '' or m.target_url is None or m.target_url == '#':
menu_link = '#'
else:
menu_link = reverse(m.target_url)
children = m.children_menu.all()
if len(children) > 0:
children_ids, children_html_menu = self.recursive_menu(m, children)
html_menu += children_html_menu
used_ids += children_ids
elif m.is_divider:
html_menu += f'''
<hr class="sidebar-divider">
<div class="sidebar-heading">
{m.title}
</div>
'''
elif m.id not in used_ids:
html_menu += f'''
<li class="nav-item active">
<a class="nav-link" href="{menu_link}">
<i class="{m.icon_class}"></i>
<span>{m.title}</span>
</a>
</li>
'''
used_ids.append(m.id)
print(html_menu)
request.menus = html_menu
def recursive_menu(self, m, children):
print("test " , m, children)
children_ids = []
html_menu = f'''
<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapse{m.order_number}"
aria-expanded="true" aria-controls="collapse{m.order_number}">
<i class="{m.icon_class}"></i>
<span>{m.title}</span>
</a>
<div id="collapse{m.order_number}" class="collapse" aria-labelledby="headingUtilities" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
'''
if len(children) < 1:
return children_ids, html_menu
else:
for c in children:
# print(c, ">>>>>>>>>..", c.children_menu)
children_ids.append(c.id)
if c.target_url == '' or c.target_url is None or c.target_url == '#':
menu_link = '#'
else:
menu_link = reverse(c.target_url)
if len(c.children_menu.all()) > 0:
child_ids, children_html_menu = self.recursive_menu(c, c.children_menu.all())
html_menu += children_html_menu
children_ids += child_ids
else:
html_menu += f'''
<a class="collapse-item" href="{menu_link}">
<i class="{c.icon_class}"></i>
<span>{c.title}</span>
</a>
'''
html_menu += '''
</div>
</div>
</li>
'''
return children_ids, html_menu
我不仅要创造, A,B
但是能够处理 某物:A:A1,A2,B,C:C1,…C7等等
非常感谢您的帮助,非常感谢
我打开来改变菜单的概念(模式/关系),关于现有的代码,我知道有一些地方我可以改进,我需要你的建议
目前没有回答
相关问题 更多 >
编程相关推荐