Django模板不包含如template inheritance那麼多的包含。
這個想法是你設置了模板層次結構,專門化了一些常見的東西。例如:
- 你可能有一個
base.html
,它有一些基本的頁面結構,對你網站的所有頁面都是通用的。
- 然後,你可以有一些模板,根據一些常見的佈局來擴展它。像
section.html
,object-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
關注如何呈現圖書,給定放置內容的位置以及放置元數據的位置。
看起來不錯。你確定實際上是在你的視圖中加載'base_menu.html'文件而不是'base.html'文件嗎? – spectras
我可能會被誤解。我正在使用這個像我會作爲一個PHP包括。這是否應該被視爲啓動? – 1Up
(理想情況下,這只是一個簡單的包括分解文件) – 1Up