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