我會給你一個提示:如果可能的話,不要在運行時混淆設置,這些變量是全局的,改變它們可能會導致一些令人討厭的錯誤。我不知道,但與該代碼你可能最終的東西,如:
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