8 在python中空的列表 ( [] ),tuple( () ),字典( {} ),字符串( '' ),零( 0 ),還有 None 對象,在邏輯判斷中都為假,其他的情況都為真。
15 forloop.revcounter 是表示循環中剩余項的整型變量。在循環初次執行時 forloop.revcounter 將被設置為序列中項的總數。最后一次循環執行中,這個變量將被置1。
16 forloop.revcounter0 類似於 forloop.revcounter ,但它以0做為結束索引。在第一次執行循環時,該變量會被置為序列的項的個數減1。在最后一次迭代時,該變量為0。
17 forloop.first 是一個布爾值。在第一次執行循環時該變量為True,在下面的情形中這個變量是很有用的。
18 forloop.last 是一個布爾值;在最后一次執行循環時被置為True。一個常見的用法是在一系列的鏈接之間放置管道符(|)
19 forloop 變量僅僅能夠在循環中使用,在模板解析器碰到 {% endfor %} 標簽時, forloop 就不可訪問了
20 {% ifequal %} 標簽比較兩個值,當他們相同時,顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
21 和 {% if %} 類似, {% ifequal %} 支持可選的 {% else%} 標簽, 只有模板變量,字符串,整數和小數可以作為 {% ifequal %} 標簽的參數,其他的一些類型,例如Python的字典類型、列表類型、布爾類型,不能用在
{% ifequal %} 中.
22 象HTML和其他的語言例如python一樣,Django模板系統也允許注釋。 注釋使用 {# #}
23 模板過濾器是在變量被顯示前修改它的值的一個簡單方法
23 addslashes : 添加反斜杠到任何反斜杠、單引號或者雙引號前面。 這在處理包含JavaScript的文本時是非常有用的。
24 date : 按指定的格式字符串參數格式化 date 或者 datetime 對象
25 在settings.py中的TEMPLATE_DIRS設置如下:
import os.path
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
26 django.shortcuts 模塊中名為 render_to_response() 的函數。大多數時候,你將使用 render_to_response() ,而不是手動加載模板、創建 Context 和 HttpResponse 對象,它會加載模板、填充 context 、將經解析的模板結果返回為 HttpResponse 對象這一系列操作
27 {% include %} 。該標簽允許在(模板中)包含其它的模板的內容。標簽的參數是所要包含的模板名稱,可以是一個變量,也可以是用單/雙引號硬編碼的字符串。每當在多個模板中出現相同的代碼時,就應該考慮是否要使用 {% include %} 來減少重復
28 模板繼承就是先構造一個基礎框架模板,而后在其子模板中對它所包含站點公用部分和定義塊進行重載。
29 {% block %} 標簽告訴模板引擎,子模板可以重載這些部分
30 {% extends %} 標簽,該模板是一個子模板。模板引擎立即裝載其父模板
31 繼承並不改變 context 的工作方式,而且你可以按照需要使用多層繼承。使用繼承的一種常見方式是下面的三層法:
a. 創建 base.html 模板,在其中定義站點的主要外觀感受。這些都是不常修改甚至從不修改的部分。
b. 為網站的每個區域創建 base_SECTION.html 模板(例如, base_photos.html 和 base_forum.html )。這些模板對 base.html進行拓展,並包含區域特定的風格與設計。
c. 為每種類型的頁面創建獨立的模板,例如論壇頁面或者圖片庫。這些模板拓展相應的區域模板。
32 使用模板繼承的一些訣竅:
a. 如果在模板中使用 {% extends %} ,必須保證其為模板中的第一個模板標記。否則,模板繼承將不起作用。
b. 一般來說,基礎模板中的 {% block %} 標簽越多越好。記住,子模板不必定義父模板中所有的代碼塊,因此你可以用合理的缺省值對一些代碼塊進行填充,然后只對子模板所需的代碼塊進行(重)定義。俗話說,鈎子越多越好。
c. 如果發覺自己在多個模板之間拷貝代碼,你應該考慮將該代碼段放置到父模板的某個 {% block %} 中。
d. 如果需要獲得父模板中代碼塊的內容,可以使用 {{ block.super }} 變量。如果只想在上級代碼塊基礎上添加內容,而不是全部重載,該變量就顯得非常有用了。
e. 不可同一個模板中定義多個同名的 {% block %} 。存在這樣的限制是因為block 標簽的工作方式是雙向的。也就是說,block 標簽不僅挖了一個要填的坑,也定義了在 父 模板中這個坑所填充的內容。如果模板中出現了兩個相同名稱的{% block %} 標簽,父模板將無從得知要使用哪個塊的內容。
f. {% extends %} 對所傳入模板名稱使用的加載方法和 get_template() 相同。也就是說,會將模板名稱被添加到TEMPLATE_DIRS 設置之后。
g. 多數情況下, {% extends %} 的參數應該是字符串,但是如果直到運行時方能確定父模板名,這個參數也可以是個變量。這使得你能夠實現一些很酷的動態功能。