我会给你一个提示:如果可能的话,不要在运行时混淆设置,这些变量是全局的,改变它们可能会导致一些令人讨厌的错误。我不知道,但与该代码你可能最终的东西,如:
MENU_ITEMS = [
'Home',
'Users',
'Contact',
'Extras',
'Extras',
'Extras',
'Extras',
]
同样,我不知道那,但你并不需要乱用你的设置,以达到你的目的。
更清晰的方法是让您的视图管理您的视图。如果你想要的只是一个菜单,创建一个基本模板,然后把菜单放在那里,然后从中扩展。如果你想在将来添加任何东西,你只需要改变那一部分(如果你想渲染一些部分取决于用户或某物,你可以在那里添加条件)。 欲了解更多详情,请参阅django docs。
例如:
<div class="header navbar">
<div class="container">
<a class="navbar-brand" href="/">{% endraw %}{{ cookiecutter.project_name }}{% raw %}</a>
<ul class="nav navbar-nav">
<li class="active"><a href="{% url 'home' %}">Home</a></li>
<li><a href="{% url 'about' %}">About</a></li>
{% if request.user.is_authenticated %}
<li><a href="{% url 'users:detail' request.user.username %}">{% trans "My Profile" %}</a></li>
<li><a href="{% url 'account_logout' %}">{% trans "Logout" %}</a></li>
{% else %}
<li><a href="{% url 'account_signup' %}">{% trans "Sign Up" %}</a></li>
<li><a href="{% url 'account_login' %}">{% trans "Log In" %}</a></li>
{% endif %}
</ul>
</div>
</div>
{% block content %}
{% endblock content %}
如果这是你的基本模板定义,扩展它会默认显示它,仅覆盖其中块内容所在的部分页面。如果你想另一个链接添加到您的导航栏只是这样做:
<li class="active"><a href="{% url 'my_other_url' %}">My new item</a></li>
你定义“my_other_url”在你urls.py.平常 这是正确的方法来做我认为你正在尝试做的事情。您可以让模板处理您网站的外观,请勿在控制器中混淆视图(如在mvc中)。
如果你想额外的项目可选,你只需要一个标志或送东西到模板及用途:
{% if flag %}
<li class="active"><a href="{% url 'my_other_url' %}">My new item</a></li>
{% endif %}
是有一些原因,你是编程接近呢?最简单的方法是在基本HTML模板的菜单中添加一个'Extras'链接。 – 2014-09-24 08:42:10
@JohnMee如果未安装额外的Django应用程序,那么这不会导致链接断开? – aco 2014-09-25 00:32:49
你说得对。我看到(现在)你正在尝试构建一个可以安装和删除自己的模块。在这种情况下,您可能对[检查已安装的应用程序](https://docs.djangoproject.com/en/1.7/ref/applications/#django.apps.apps.is_installed)感兴趣,以协助确定您的项目属于哪个菜单 - 除了检查本身将是安装的一部分?!我很想暗示你已经过了头。我是。 – 2014-09-25 01:20:00