這篇文章主要介紹了Django中模版的子目錄與include標簽的使用方法,有利于Python的Django框架的模版布局,需要的朋友可以參考下
get_template()中使用子目錄
把所有的模板都存放在一個目錄下可能會讓事情變得難以掌控。 你可能會考慮把模板存放在你模板目錄的子目錄中,這非常好。 事實上,我們推薦這樣做;一些Django的高級特性(例如將在第十一章講到的通用視圖系統)的缺省約定就是期望使用這種模板布局。
把模板存放于模板目錄的子目錄中是件很輕松的事情。 只需在調用 get_template() 時,把子目錄名和一條斜杠添加到模板名稱之前,如:
- t = get_template('dateapp/current_datetime.html')
由于 render_to_response() 只是對 get_template() 的簡單封裝, 你可以對 render_to_response() 的第一個參數做相同處理。
return render_to_response('dateapp/current_datetime.html', {'current_date': now})
對子目錄樹的深度沒有限制,你想要多少層都可以。 只要你喜歡,用多少層的子目錄都無所謂。
注意
Windows用戶必須使用斜杠而不是反斜杠。 get_template() 假定的是 Unix 風格的文件名符號約定。
include 模板標簽
在講解了模板加載機制之后,我們再介紹一個利用該機制的內建模板標簽: {% include %} 。該標簽允許在(模板中)包含其它的模板的內容。 標簽的參數是所要包含的模板名稱,可以是一個變量,也可以是用單/雙引號硬編碼的字符串。 每當在多個模板中出現相同的代碼時,就應該考慮是否要使用 {% include %} 來減少重復。
下面這兩個例子都包含了 nav.html 模板。這兩個例子是等價的,它們證明單/雙引號都是允許的。
- {% include 'nav.html' %}
- {% include "nav.html" %}
下面的例子包含了 includes/nav.html 模板的內容:
- {% include 'includes/nav.html' %}
下面的例子包含了以變量 template_name 的值為名稱的模板內容:
- {% include template_name %}
和在 get_template() 中一樣, 對模板的文件名進行判斷時會在所調取的模板名稱之前加上來自 TEMPLATE_DIRS 的模板目錄。
所包含的模板執行時的 context 和包含它們的模板是一樣的。 舉例說,考慮下面兩個模板文件:
- # mypage.html
- <html>
- <body>
- {% include "includes/nav.html" %}
- <h1>{{ title }}</h1>
- </body>
- </html>
- # includes/nav.html
- <div id="nav">
- You are in: {{ current_section }}
- </div>
如果你用一個包含 current_section的上下文去渲染 mypage.html這個模板文件,這個變量將存在于它所包含(include)的模板里,就像你想象的那樣。
如果{% include %}標簽指定的模板沒找到,Django將會在下面兩個處理方法中選擇一個:
如果 DEBUG 設置為 True ,你將會在 Django 錯誤信息頁面看到 TemplateDoesNotExist 異常。
如果 DEBUG 設置為 False ,該標簽不會引發錯誤信息,在標簽位置不顯示任何東西。
新聞熱點
疑難解答