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

2024-04-29 19:03:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何在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:对不起我的英语,我是波兰人。在


Tags: src模板urltitlehtmljsscriptstatic
2条回答

以前我也有过同样的问题,我最终创建了一个Mixin并在其中注入了菜单,更具体(这是在您使用基于类的视图的情况下…您应该…):

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):
    ...

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

^{pr2}$

在你的部分里/菜单.html公司名称:

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

您可能被插入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()))

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

相关问题 更多 >