2013-02-06 89 views
26

我可以爲我的項目創建一個基礎模板,所有應用程序都可以從中繪製基礎模板嗎?或者我必須爲每個應用程序創建一個基本模板?如果我想讓它們保持一致,我只需要複製它們?Django項目基地模板

回答

50

當然可以。一個base.html文件

<!DOCTYPE html> 
<html> 
    <head> 
     <title>My Project</title> 
    </head> 

    <body> 
    {% block content %}{% endblock content %} 
    </body> 
</html> 

,說你有一個名爲MYAPP與view.html頁的應用程序,

{% extends "base.html" %} 

{% block content %} 
    <h2>Content for My App</h2> 
    <p>Stuff etc etc.</p> 
{% endblock content %} 

的一個簡單的例子花一些時間來read the docs瞭解更多信息

+6

重要的一點,很多人懷念的是'{%延伸XXX% }'可以接受一個字符串文字文件名(即「base.html」)*或*一個解析爲文件名的變量。我們在開發過程中使用它,並且實時更改'{%extends base_template%}'的值。所有主要模板(列表,細節,平面文件等)都使用非常通用的/語義標記,以及所有CSS /等等。在每個主題的基礎文件中定義。例如。 'themes/blue.html'或'themes/neon.html'。 –

+7

這對我來說不是很清楚*這些文件必須放在哪裏。我希望我的基本模板位於PROJECT_ROOT/templates/base.html中,因此它適用於所有應用程序。但是現在我怎麼才能引用它,因爲'extend'語句在PROJECT_ROOT/app-name/templates/...中尋找模板? – jlh

+0

@jlh:當我將模板放入PROJECT_ROOT/project-name/templates/base.html時,它對我有用 – Andreas

4

是你絕對可以做到這一點。在Django模板中使用extendsinclude模板標籤。

我開始學習Django並且最近弄清楚了這一點。我的代碼是在Github如果你有興趣考慮看看我是如何構建Django模板從base.html然後include共同繼承的東西,如導航欄和頁眉,頁腳等

4

有一些問題,在最後答案,這裏是正確的; 您必須base.html文件是這樣的:

{% load staticfiles %} 

<!DOCTYPE html> 
<html> 
<head> 
    <title>My Project</title> 
</head> 
<body> 
{% block content %}{% endblock %} 
</body> 
</html> 

,也爲的index.html

{% extend "appname/base.html" %} 
{% block content %} 
    <h1>test</h1> 
{% endblock %} 
+0

輕微的錯字 - 應該是{%extends「appname/base.html」%}而不是{%extend「appname /base.html「%} – niceguydave