在django-simple-menu

时间:2017-06-02 14:19:44

标签: python django

我想在我的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))

1 个答案:

答案 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 %}