模板
作爲Web框架,Django提供了模板,用於編寫html代碼,還可以嵌入模板代碼更快更方便的完成頁面開發,再通過在視圖中渲染模板,將生成最終的html字符串返回給客戶端瀏覽器。模版致力於表達外觀,而不是程序邏輯。模板的設計實現了業務邏輯view與顯示內容template的分離,一個視圖可以使用任意一個模板,一個模板可以供多個視圖使用。
模板包含兩部分:
- 靜態部分,包含html、css、js。
- 動態部分,就是模板語言。
Django模板語言,簡寫DTL,定義在django.template包中。
配置模板文件夾
創建項目後,在"項目名稱/settings.py"文件中定義了關於模板的配置。
DIRS定義一個目錄列表,模板引擎按列表順序搜索這些目錄以查找模板文件,通常是在項目的根目錄下創建templates目錄。
Django處理模板分爲兩個階段:
- 1.加載:根據給定的路徑找到模板文件,編譯後放在內存中。
- 2.渲染:使用上下文數據對模板插值並返回生成的字符串。
爲了減少開發人員重複編寫加載、渲染的代碼,Django提供了簡寫函數render,用於調用模板。
模板語言
模板語言包括4種類型,分別是:
- 變量
- 標籤
- 過濾器
- 註釋
模板變量
模板變量的作用是計算並輸出,變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。
語法如下:
{{變量}}
例如,當 book爲後端傳過來的值時 , 模版引擎遇到 點 如book.title,會按照下列順序解析:
- 1.字典book['title']
- 2.先屬性後方法,將book當作對象,查找屬性title,如果沒有再查找方法title()
- 3.如果是格式爲book.0 則解析爲 列表book[0]
如果變量不存在則插入空字符串''。
在模板中調用方法時不能傳遞參數。
模板標籤
語法如下:
{%代碼段%}
for標籤語法如下:
{%for item in 列表%} 循環邏輯 {{forloop.counter}}表示當前是第幾次循環,從1開始 {%empty%} 列表爲空或不存在時執行此邏輯 {%endfor%}
if標籤語法如下:
{%if ...%} 邏輯1 {%elif ...%} 邏輯2 {%else%} 邏輯3 {%endif%}
比較運算符如下:
注意:運算符左右兩側不能緊挨變量或常量,必須有空格。
== != < > <= >=
布爾運算符如下:
and or not
點擊查看了解更多標籤https://docs.djangoproject.com/zh-hans/2.1/ref/templates/builtins/
模板過濾器
語法如下:
- 使用管道符號 | 來應用過濾器,用於進行計算、轉換操作,可以使用在變量、標籤中。
- 如果過濾器需要參數,則使用冒號 : 傳遞參數。
變量|過濾器:參數
長度length,返回字符串包含字符的個數,或列表、元組、字典的元素個數。
data|length
默認值default,如果變量不存在時則返回默認值。
data|default:'默認值'
日期date,用於對日期類型的值進行字符串格式化,常用的格式化字符如下:
- Y表示年,格式爲4位,y表示兩位的年。
- m表示月,格式爲01,02,12等。
- d表示日, 格式爲01,02等。
- j表示日,格式爲1,2等。
- H表示時,24進制,h表示12進制的時。
- i表示分,爲0-59。
- s表示秒,爲0-59。
value|date:"Y年m月j日 H時i分s秒"
點擊查看了解更多標籤https://docs.djangoproject.com/zh-hans/2.1/ref/templates/builtins/
模板註釋
在模板中使用如下模板註釋,這段代碼不會被編譯,不會輸出到客戶端;html註釋只能註釋html內容,不能註釋模板語言。
1)單行註釋語法如下:
{#...#}
註釋可以包含任何模版代碼,有效的或者無效的都可以。
{# { % if foo % }bar{ % else % } #}
2)多行註釋使用comment標籤,語法如下:
{%comment%} ... {%endcomment%}