Python 在django简单菜单中使用上下文参数

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

我想在我的django应用程序中创建一个菜单,该菜单根据正在查看的页面而变化。我正在尝试使用Django简单菜单。 我正在努力使URL参数可以在我的menus.py中访问。 这是到目前为止我所拥有的代码,我想用来自URL参数的参数替换“company”字符串。这是可能的,还是最好在我的视图中创建一个菜单并将其分配给上下文

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文档