2014-09-24 60 views
2

我已經寫了Django的網站,用含有如下菜單項列表一個簡單的主頁:Django的應用程序,添加內容到同一頁面

  • 首頁
  • 用戶
  • 聯繫

我現在正在爲此網站開發一個可選的Django應用程序。安裝時,我希望在主頁上添加一個名爲「Extras」的額外菜單項。

在Django中實現這種事情的最佳方式是什麼?

我已經考慮加入這樣的事情我settings.py文件:

MENU_ITEMS = [ 
    'Home', 
    'Users', 
    'Contact', 
] 

然後我的應用程序的__init__.py裏面,我會做這樣的事情:

from django.conf import settings 
settings.MENU_ITEMS.append('Extras') 

並且視角.py文件會將此MENU_ITEMS列表傳遞給主頁模板。這是正確的方法還是有更好的方法?

+0

是有一些原因,你是編程接近呢?最簡單的方法是在基本HTML模板的菜單中添加一個'Extras'鏈接。 – 2014-09-24 08:42:10

+0

@JohnMee如果未安裝額外的Django應用程序,那麼這不會導致鏈接斷開? – aco 2014-09-25 00:32:49

+0

你說得對。我看到(現在)你正在嘗試構建一個可以安裝和刪除自己的模塊。在這種情況下,您可能對[檢查已安裝的應用程序](https://docs.djangoproject.com/en/1.7/ref/applications/#django.apps.apps.is_installed)感興趣,以協助確定您的項目屬於哪個菜單 - 除了檢查本身將是安裝的一部分?!我很想暗示你已經過了頭。我是。 – 2014-09-25 01:20:00

回答

0

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

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 %} 
+0

你能提供一個我如何實現這個目標的例子嗎?我希望額外的應用程序向現有主頁添加一個元素,而不是創建從原始主頁繼承的第二個主頁,這是文檔描述的內容。 – aco 2014-09-25 00:36:29

+0

你可以嘗試安裝這個項目模板:https://github.com/pydanny/cookiecutter-django。讓它工作,然後轉到templates/base.html。你可以看到他們有幾個頁面,他們都有導航欄。這是我用於我的項目的基礎。 (如果你不想安裝它,你可以檢查github中的templates/base.html模板) – cdvv7788 2014-09-25 01:37:44

+0

不知道我明白。 cookiecutter中的導航欄具有一組在基本模板中定義的鏈接(請參閱https://github.com/pydanny/cookiecutter-django/blob/master/%7B%7Bcookiecutter.repo_name%7D%7D/%7B% 7Bcookiecutter.repo_name%7D%7D /模板/ base.html文件)。另一個應用程序將如何添加一個額外的鏈接到這個導航欄? – aco 2014-09-26 07:42:30

相關問題