我想在我的django应用程序中创建一个菜单,该菜单正在根据正在查看的页面进行更改。我尝试使用Django-simple-menu。 我想在我的menus.py中获取可访问的URL参数。 这是我到目前为止的代码,并希望取代'公司'带有来自我的URL参数的参数的字符串。这是可能的,还是在我的视图中创建菜单并将其分配给上下文更好?
hier = Hierachy.get_root_nodes().filter(company__slug= 'company')
for site in hier:
children = list()
for plant in site.get_children():
children.append(MenuItem(plant.name,
reverse('pha:companyHierarchy', args=[plant.company.slug, plant.slug,]),
weight=10,
icon="user"))
Menu.add_item("study", MenuItem(site.name, reverse('pha:companyHierarchy', args=[site.company.slug, site.slug,]),
weight=10,
icon="tools",
children=children))
答案 0 :(得分:0)
经过一番捣乱后,我发现了以下解决方案,写了一些中间件。
class SimpleMiddleware(object):
def process_view(self, request, func, args, kwargs):
Menu.items.clear()
hier = Hierachy.get_root_nodes().filter(company__slug= kwargs['slug'])
for site in hier:
children = list()
for plant in site.get_children():
children.append(MenuItem(plant.name,
reverse('pha:companyHierarchy', args=[plant.company.slug, plant.slug,]),
weight=10,
icon="user"))
Menu.add_item("study", MenuItem(site.name, reverse('pha:companyHierarchy', args=[site.company.slug, site.slug,]),
weight=10,
icon="tools",
children=children))
return None
这是模板的代码 menu.html
{% if menus.study %}
<li class="dropdown">
<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown">
Studies
</a>
<ul class="dropdown-menu">
{% for nodeMenu in menus.study %}
{% if nodeMenu.children %}
<li class="dropdown-submenu">
<a href="{{nodeMenu.url}}">{{nodeMenu.title}}</a>
<!-- Get plants and studies -->
<ul class="dropdown-menu">
{% for child in nodeMenu.children %}
<li><a href="{{child.url}}">{{child.title}}</a></li>
{% endfor %}
</ul>
</li>
{% else %}
<li class="">
<a href="{{nodeMenu.url}}">{{nodeMenu.title}}</a>
</li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endif %}