2015-06-22 70 views
0

在我base.html文件我有這樣的:Django塊包含不起作用。我錯過了什麼?

{% block menu %}{% endblock menu %} 

base_menu.html我有這樣的:

{% extends "base.html" %}  
{% block menu %} 
<nav class="navbar navbar-inverse navbar-fixed-top"> 
... stuff ... 
</div> 
{% endblock menu %} 

我希望菜單HTML,以顯示其中初始block menu指令是...但它不包括。我錯過了什麼?

它應該很容易! :D

+0

看起來不錯。你確定實際上是在你的視圖中加載'base_menu.html'文件而不是'base.html'文件嗎? – spectras

+0

我可能會被誤解。我正在使用這個像我會作爲一個PHP包括。這是否應該被視爲啓動? – 1Up

+0

(理想情況下,這只是一個簡單的包括分解文件) – 1Up

回答

2

Django模板不包含如template inheritance那麼多的包含。

這個想法是你設置了模板層次結構,專門化了一些常見的東西。例如:

  • 你可能有一個base.html,它有一些基本的頁面結構,對你網站的所有頁面都是通用的。
  • 然後,你可以有一些模板,根據一些常見的佈局來擴展它。像section.htmlobject-details.html
  • 然後通過擴展這些模板來構建最終模板。像book-section.html,author-details.html,book-details.html

問題是,在你看來,你包括你的繼承樹的葉子。它們只定義繼承樹中定義較高的佔位符(塊)內容的細節。

實施例:

base.html文件

<html> 
<head> 
    <title>{{ title }}</title> 
    {% block css %}<link rel="stylesheet" href="main.css">{% endblock %} 
</head> 
<body class="{% block bodyclass %}{% endblock %}"> 
    <header>{# TODO: put some logo and banner here #}</header> 
    {% block body %} 
</body> 
</html> 

base_2cols.html

{% extends "base.html" %} 

{% block bodyclass %}{{ block.super }} two-columns{% endblock %} 

{% block body %} 
    <nav><ul>{% block menu %}</ul></nav> 
    <div id="wrapper"><main>{% block content %}{% endblock %}</main></div> 
    <aside>{% block metadata %}{% endblock %}</aside> 
{% endblock %} 

book.html

{% extends "base_2cols.html" %} 

{% block bodyclass %}{{ block.super }} book{% endblock %} 

{% block menu %} 
    <li>Some menu item</li> 
    <li>Some other menu item</li> 
{% endblock menu %} 

{% block content %} 
    <article> 
     <h1>{{ book.title }}</h1> 
     <p>{{ book.description }}</p> 
    </article> 
{% endblock %} 

{% block metadata %} 
    Last updated on {{ book.updated|date:"Y-m-d" }} 
{% endblock %} 

在您看來,您會使用book.html。它將呈現一個包含兩列的完整頁面(當然,正確的css當然),主列包含標題和描述,而旁邊列包含最後更新的部分。

整個問題的關鍵在於允許重新使用和分離問題。 base.html關注文檔的結構。 base_2cols.html關注如何使用菜單創建2列視圖。 book.html關注如何呈現圖書,給定放置內容的位置以及放置元數據的位置。

相關問題