如何在基本模板(Django)中制作菜单?

时间:2014-01-15 09:43:38

标签: python django templates web menu

如何在Django中创建一个位于基本模板中的菜单,它从数据库获取内容? 我的基本模板:

<!DOCTYPE html>
<html>
    <head>
        <title>{% block title %}My page{% endblock %}</title>
        <link rel="stylesheet" href="{{ STATIC_URL }}css/uikit.min.css" />
        <script src="{{ STATIC_URL }}js/jquery.min.js"></script>
        <script src="{{ STATIC_URL }}js/uikit.min.js"></script>
    </head>
    <body>
        {% block content %}
        {% endblock %}
    </body>
</html>

PS:对不起我的英文,我很好。

2 个答案:

答案 0 :(得分:2)

回来有时候我有同样的问题,我最后创建了一个Mixin并在那里注入菜单,更具体(这是你使用基于类的视图的情况......你应该...):< / p>

class MenuMixin(object):
    def get_context_data(self, **kwargs):
        context = super(MenuMixin, self).get_context_data(**kwargs)
        context['menu'] = MenuModel.objects.all()
        return context


class MyListView(MenuMixin, ListView):
    ...

然后在您的模板中,您可以简单地:

{% include "partials/menu.html" %}

在partials / menu.html中:

{% for item in menu %}
    <a href="{{ item.link }}">{{ item.name }}</a>
{% empty %}
    Do something for empty...
{% endfor %}

答案 1 :(得分:1)

你可能对django-simple-menu感兴趣。

然后为了使其适应您的用例,您可以简单地从menus.py内部读取数据库项(请记住这只是一个伪代码):

# menus.py

items = Menu.objects.all()

for item in items:
    Menu.add_item("main", MenuItem(item.name, item.url),
                          weight=10,
                          icon=item.name.lower()))

您可能会想到的其他解决方案是创建上下文处理器或自定义标记,但如果您经验不足且菜单结构更复杂(子菜单),则可能很难自行解决。