2011-12-19 45 views
5

最近朋友和開發者對我的尊重建議我避免在django模板中使用'包含'。他們的論點的總和是包括'邪惡'。Django包括 - 他們是邪惡的?

我無法理解邏輯;我的新手的觀點是,他們是一個偉大的方式來組織塊可重複使用的HTML,而不是必須在多個位置編輯HTML,我可以簡單地編輯它在一個必須進行更改時。

你所有的天才們都認爲什麼?請提供一些Pro和Con的使用包括在Django中的模板

+0

如果某人的邏輯總和爲「這是邪惡」,那麼這不是邏輯!開發人員對宗教人士來說也是如此:) – Spacedman 2011-12-19 18:36:15

回答

9

這似乎有點奇怪。包含模板語言的完美有效部分,從第1天開始就一直如此,從未推薦AFAIK或棄用。

你的朋友可能試圖說你應該更多地依賴模板繼承(這是一種相反的包含)。這是真的,只要它走了 - 大多數情況下,最好是組合模塊來覆蓋或擴展在父模板中定義的塊。但是肯定會有一個包含的用例。

他可能會這樣說的唯一原因是因爲加載的文件系統命中包含磁盤模板。在這種情況下,他絕對不是標準 - 再一次,模板繼承模型,當然推薦將具有完全相同的命中;這兩者都可以通過使用可選的緩存文件系統加載程序來避免。

3

正如丹尼爾所說,由於他提到的原因,包含完全有效。因此,很難給予Pro和Con,因爲這取決於你想要完成什麼。

通常最好在基本模板中的塊標記內定義網站的公共元素,並使用模板繼承來更改每個頁面上您需要的部分。但是,如果您只是需要在許多地方重複使用一段文字,則「包含」將是完美的。

需要注意的重要一點是,包含的塊不能包含塊標籤,因爲它們是在沒有任何父頁面知識的情況下自行呈現的。爲了更好地理解這個,請參閱template docs on includes或此(非bug)bug report的註釋。如果您發現自己需要此功能,則可能值得考慮是否應該將包含的文件移動到塊標記內的基本模板中。

2

他可能會說你最好寫自定義標籤。因此,而不是有:

{% for post in blog %} 
{% include "blog.tmpl" %} 
{% endfor %} 

你應該做的:

{% for post in blog %} 
{% formatPost post %} 
{% endfor %} 

的包括方法依賴於博客上的所謂「後」的對象之中,而自定義標記方法供您格式化任何東西。例如,如果你有這樣的比較的兩個博客的帖子的頁面,你會送他們爲在上下文「POST1」和「POST2」做:

<h1>John Said</h1> 
    {% formatPost post1 %} 
    <h1>And Fred Said</h1> 
    {% formatPost post2 %} 

更加重用。使用包含,您必須將post1和post2中的每一個重命名爲「發佈」,然後包含該模板...