python django 模板

1 用兩個大括號括起來的文字{{person_name}} 稱爲 變量
2 被 大括號和麪分號包圍的文件({% if ordered_warranty %}) 是模板標籤
3 過濾器是用管道符(|) 和Unix管道符同樣
一旦你建立一個  Template  對象,你能夠用  context  來傳遞數據給它。 一個context是一系列變量和它們值的集合。模板使用它來賦值模板變量標籤和 執行塊標籤。
變量名必須由英文字符開始 (A-Z或a-z)並能夠包含數字字符、下劃線和小數點。 (小數點在這裏有特別的用途,稍後咱們會講到)變量是大小寫敏感的。
在 Django 模板中遍歷複雜數據結構的關鍵是句點字符 (.)。使用句點能夠訪問字典的鍵值、屬性、索引和對象的方法。
7 {% if %} 標籤檢查(evaluate)一個變量,若是這個變量爲真(即,變量存在,非空,不是布爾值假),系統會顯示在 {% if %} 和 {% endif %} 之間的任何內容. {% else %} 標籤是可選的:
 

在python中空的列表 ( [] ),tuple( () ),字典( {} ),字符串( '' ),零( 0 ),還有 None 對象,在邏輯判斷中都爲假,其餘的狀況都爲真。html

{% if %}  標籤接受  and  ,  or  或者  not  關鍵字來對多個變量作判斷 ,或者對變量取反(  not  ) 並無
10    {% elif %}  標籤,請使用嵌套的 {% if %} , 必定要用 {% endif %} 關閉每個 {% if %} 標籤.
11  {% for %}  容許咱們在一個序列上迭代。與Python的  for  語句的情形相似,循環語法是  for X in Y  ,Y是要迭代的序列而X是在每個特定的循環中使用的變量名稱。每一次循環中,模板系統會渲染在  {% for %}  和  {% endfor %}  之間的全部內容.
12  Django不支持退出循環操做。若是咱們想退出循環,能夠改變正在迭代的變量,讓其僅僅包含須要迭代的項目
13  {% for %}  標籤在循環中設置了一個特殊的  forloop  模板變量
14  forloop.counter0   相似於   forloop.counter   ,可是它是從0計數的。第一次執行循環時這個變量會被設置爲0。

15 forloop.revcounter 是表示循環中剩餘項的整型變量。在循環初次執行時 forloop.revcounter 將被設置爲序列中項的總數。最後一次循環執行中,這個變量將被置1。python

16 forloop.revcounter0 相似於 forloop.revcounter ,但它以0作爲結束索引。在第一次執行循環時,該變量會被置爲序列的項的個數減1。在最後一次迭代時,該變量爲0。django

17 forloop.first 是一個布爾值。在第一次執行循環時該變量爲True,在下面的情形中這個變量是頗有用的。數據結構

18 forloop.last 是一個布爾值;在最後一次執行循環時被置爲True。一個常見的用法是在一系列的連接之間放置管道符(|)框架

19 forloop 變量僅僅可以在循環中使用,在模板解析器碰到 {% endfor %} 標籤時, forloop 就不可訪問了函數

20 {% ifequal %} 標籤比較兩個值,當他們相同時,顯示在 {% ifequal %} 和 {% endifequal %} 之中全部的值。oop

21 和 {% if %} 相似, {% ifequal %} 支持可選的 {% else%} 標籤, 只有模板變量,字符串,整數和小數能夠做爲 {% ifequal %} 標籤的參數,其餘的一些類型,例如Python的字典類型、列表類型、布爾類型,不能用在 網站

{% ifequal %} 中.編碼

22 象HTML和其餘的語言例如python同樣,Django模板系統也容許註釋。 註釋使用 {# #} lua

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 %} 的參數應該是字符串,可是若是直到運行時方能肯定父模板名,這個參數也能夠是個變量。這使得你可以實現一些很酷的動態功能。

相關文章
相關標籤/搜索