Django模塊學習之模塊語言詳解
前言
Django模塊引擎支持Django模塊語言(簡稱DTL)。DTL包含變量、註釋、過濾器、標簽、模塊繼承以及HTML轉義等語法。
本文介紹以下6個模塊語言
1、變量
2、註釋
3、過濾器
4、標簽:include
5、標簽:for
6、標簽:in
1、變量
DTL用{{變量名}}格式表示變量。變量名由字母、數字、下劃線組成,但不能以下劃線開頭。Django在渲染模板時,會遇到的變量替換為上下文中對應的變量值。如果變量是對象,可以使用點號(·)訪問其屬性或方法。
2、註釋
DTL用{#…#}來表示註釋,註釋的內容不會出現在渲染結果裡
被{#…#}註釋的內容不能換行。要註釋多行內容,應使用comment標簽
<p>姓名:{{ name }}</p> {% comment "多行註釋" %} <p>年齡:{{ age }}</p> <p>日期:{{ now }}</p> {% endcomment %}
模板中年齡和日期被包含在註釋中,在渲染時會被忽略。例如,在視圖中使用該模板的示例代碼
def testTemplate(request): time=datetime.today() c={'name':"小鐳",'age':999,'now':time} return render(request,'testtem.html',c)
瀏覽器顯示的渲染結果如圖:
3、過濾器
過濾器用於改變變量的顯示結果。常用的過濾器有如下3個:
(1)default:設置變量為false或為空時顯示的替代值。基本格式為{{變量|default:替代值}}
(2)length:返回字符串或列表長度。基本格式為{{變量|length}}
(3)filesizeformat:將數值轉換為文件大小格式,如1.1KB。基本格式為{{變量|filesizeformat}}
(Django提供瞭60多個內置模塊過濾器 )
4、標簽:include
標簽用於完成一些更復雜的操作。如包含模塊,控制流程,創建輸出文本或實現模板繼承。
include標簽用於包含模塊,將其他模板代碼插入當前位置,並使用當前模板的上下文進行渲染。
include標簽的基本格式為:
{%include 模塊名稱%}
模塊名稱可以是字符串或者字符串變量。例如,模板文件testtemm.html代碼
模板A:{{data|default:’nothing’}}<br>
模板文件testtem1.html代碼
{%include ‘testtemm.html’%}
模板B:當前日期:{%now “Y 年 m 月 d 日 H:i:s”%}
下面的試圖使用模板testtem.html
def testTemplate1(request): return render(request,'testtem1.html',{'data':123})
模塊testtem.html中使用瞭{%now%}標簽獲得指定格式的當前日期字符串。瀏覽器顯示渲染結果:
可在包含模塊時指定參數,
{%include 'testtemm.html' with name='小鐳'%}
with之後連接的是參數,參數名與模板中的變量名一致。在傳遞多個參數時,使用空格作為分隔符
{%include 'testtemm.html' with data='abcd' data2=123%}
示例:
<!--chaper6\chaper6\templates\testtemm.html--> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> 模板A:{%include 'testtem.html' with name='小鐳'%} </body> </html>
5、標簽:for
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test1</title> </head> <body> <table> {% for r in data %} <tr> <td>第{{forloop.counter}}行:</td> {% for a in r %} <td>{{a}}</td> {% endfor %} </tr> {% endfor %} </table> </body> </html>
下面的試圖使用該模板
def test1(request): data=[[1,2,3,4],[5,6,7,8],['a','b','c','d']] return render(request,'test1.html',{'data':data})
瀏覽器顯示的渲染結果如圖:
可以使用reversed表示反向循環
{%for r in data reversed%}
將上面的模板文件 test1.html中的for標簽改為反向循環後,渲染結果(使用反向循環的渲染結果):
對於包含子列表的列表變量,for標簽可將子列表映射到獨立變量,
<ul> {% for a,b,c,d in data %} <li> {{ a }},{{b}},{{ c }},{{ d }} </li> {% endfor %} </ul>
對於字典對象,for標簽可分別映射鍵和值。例如,字典對象{‘name’:“小鐳”,‘age’:999}可用下面的模板:
<ul> {% for key,value in data.items %} <li> {{ key }}={{ value }} </li> {% endfor %} </ul>
渲染結果如圖:
可在for標簽塊的內部使用{% empty %}, 它表示當要遍歷的對象不存在或為空時輸出的內容。
示例:
<ul> {% for key,value in data1.items %} <li> {{ key }}={{ value }} </li> {% empty %} 在上下文中沒找到字典對象,或者data為空 {% endfor %} </ul>
因為data1為空字典,所以使用{%empty%}
6、標簽:if
if標簽用於構造條件分支,其基本結構如下
{% if var1 %} .. {% elif var2 %} .. {% else %} .. {% endif %}
elif和else塊可以省略,elif塊可以有多個。Django按先後順序依次計算if和elif標簽的變量,如果變量為“真”(及變量存在,不為空、且不是False),則輸出相應的數據塊,且流程跳轉到endif標簽後。如果沒有變量為“真”,則輸出else數據塊(如果else數據塊存在的話)
例如,下面的模塊根據分數輸出等級:
分數:{{ data }}, {% if data >= 90 %} 等級:A {% elif data >= 80 %} 等級:B {% elif data >= 70 %} 等級:C {% elif data >= 60 %} 等級:D {% else %} 等級:不合格 {% endif %}
下面的視圖使用該模塊:
def test2(request): data=int(request.GET['data']) return render(request,'test1.html',{'data':data})
本例從URL中獲得分數(格式為正式),request。GET[‘data’]獲得的數據默認為字符串格式,所以需要將其轉換為整數。如果未做轉換,Django會將其作為字符串,模板將輸出else標簽部分的數據。
運在瀏覽器中訪問 “http://127.0.0.1:8000/test2?data=88”,輸出結果如圖所示
總結
到此這篇關於Django模塊學習之模塊語言的文章就介紹到這瞭,更多相關Django模塊語言內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Django學習之靜態文件與模板詳解
- Python Django框架介紹之模板標簽及模板的繼承
- Django路由層如何獲取正確的url
- django實現圖片上傳數據庫並顯示
- Django分頁器的用法你都瞭解嗎