我的基于django的网站将有3个单独的菜单。第一项是:联系,关于,披露。第二个将包括:条款和条件,隐私政策,版权。主菜单的项目是:Home,link1,link2,link2 ....前两个菜单将有固定项目,最后一个菜单的项目可能会改变。正如我将在模板中使用forloop一样,创建这些菜单的最佳方法是什么。网页只有标题和内容。
答案 0 :(得分:1)
我喜欢将inclusion template tags用于动态菜单。
在my-app/templatetags/myappmenu.py
中,我有类似的内容:
from django import template
register = template.Library()
@register.inclusion_tag('my-app/menu.html')
def myappmenu():
return [("label1", "link1"), ("label2", "link2")]
然后,在您的模板中,您可以循环显示项目,并以您希望的格式(<p>
,<ul>
等)生成菜单。
如果您需要在菜单中有条件地显示项目,可以通过检查模板标签中的权限将它们添加到列表中;只需将请求或用户对象作为参数传递给模板标记函数。
答案 1 :(得分:0)
您可以 DRY ,只需使用 django-menuware 。它也支持嵌套菜单。
安装:强>
pip install django-menuware
# Add `menuware` to your settings.py**
# Add `MENUWARE_MENU` to your settings.py:**
设置:强>
MENUWARE_MENU = {
"RIGHT_NAV_MENU": [
{ # Show `Login` to `unauthenticated` users ONLY
"name": "Login",
"url": "/login/",
"render_for_unauthenticated": True,
},
{ # Show `Logout` to `authenticated` users ONLY
"name": "Logout",
"url": "/logout/",
"render_for_authenticated": True,
},
{ # Show `Search` to all users
"name": "Search",
"url": "/search/",
"render_for_unauthenticated": True,
"render_for_authenticated": True,
},
],
"LEFT_NAV_MENU": [
{ # Show `Admin` to `superuser` ONLY
"name": "Admin",
"url": "admin:index", # Reversible
"render_for_authenticated": True,
"render_for_superuser": True,
},
{ # Show `Comment Admin` to `staff` users ONLY
"name": "Comment Admin",
"url": "/review/admin/",
"render_for_authenticated": True,
"render_for_staff": True,
},
]
<强>用法:强>
<!-- base.html -->
{% load menuware %}
<!DOCTYPE html>
<html>
<head><title>Django Menuware</title></head>
<body>
<!-- NAV BAR Start -->
{% get_menu "LEFT_NAV_MENU" as left_menu %}
<div style="float:left;">
{% for item in left_menu %}
<li class="{% if item.selected %} active {% endif %}">
<a href="{{item.url}}">{{item.name}}</a>
</li>
{% endfor %}
</div>
{% get_menu "RIGHT_NAV_MENU" as right_menu %}
<div style="float:right;">
{% for item in right_menu %}
<li class="{% if item.selected %} active {% endif %}">
<a href="{{item.url}}">{{item.name}}</a>
</li>
{% endfor %}
</div>
<!-- NAV BAR End -->
</body>
</html>
最低限度的是,您想要在推出自己的页面之前查看其Github README页面。