Python 在django简单菜单中使用上下文参数
我想在我的django应用程序中创建一个菜单,该菜单根据正在查看的页面而变化。我正在尝试使用Django简单菜单。 我正在努力使URL参数可以在我的menus.py中访问。 这是到目前为止我所拥有的代码,我想用来自URL参数的参数替换“company”字符串。这是可能的,还是最好在我的视图中创建一个菜单并将其分配给上下文Python 在django简单菜单中使用上下文参数,python,django,Python,Django,我想在我的django应用程序中创建一个菜单,该菜单根据正在查看的页面而变化。我正在尝试使用Django简单菜单。 我正在努力使URL参数可以在我的menus.py中访问。 这是到目前为止我所拥有的代码,我想用来自URL参数的参数替换“company”字符串。这是可能的,还是最好在我的视图中创建一个菜单并将其分配给上下文 hier = Hierachy.get_root_nodes().filter(company__slug= 'company') for site in hier: chil
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))
经过一番周折,我在编写一些中间件时发现了以下解决方案
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 %}
{%if menus.study%}
{%用于菜单中的nodeMenu.study%}
{%if nodeMenu.children%}
-
{nodeMenu.children%}
{%endfor%}
{%else%}
-
{%endif%}
{%endfor%}
{%endif%}
我知道这是个老生常谈的问题,但我正在尝试做一些与你类似的事情。您是如何在html代码中整合此中间件的?特别是在你的块菜单代码?我在这部分遇到了一些麻烦。你可以像在普通菜单中一样在html中使用它。您需要在设置中添加您的中间件。这需要在中间件_类=[]中完成。好的!你能把你的html菜单贴在你的问题里吗?为了了解如何调用中间件,我使用此菜单添加了模板的代码。但是,您不需要在html中调用中间件。您需要将此中间件添加到settings.py。请参阅关于中间件的django文档