如何在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:对不起我的英文,我很好。
答案 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()))
您可能会想到的其他解决方案是创建上下文处理器或自定义标记,但如果您经验不足且菜单结构更复杂(子菜单),则可能很难自行解决。