Django模塊學(xué)習(xí)之模塊語言詳解
前言
Django模塊引擎支持Django模塊語言(簡稱DTL)。DTL包含變量、注釋、過濾器、標(biāo)簽、模塊繼承以及HTML轉(zhuǎn)義等語法。
本文介紹以下6個(gè)模塊語言
1、變量
2、注釋
3、過濾器
4、標(biāo)簽:include
5、標(biāo)簽:for
6、標(biāo)簽:in
1、變量
DTL用{{變量名}}格式表示變量。變量名由字母、數(shù)字、下劃線組成,但不能以下劃線開頭。Django在渲染模板時(shí),會(huì)遇到的變量替換為上下文中對應(yīng)的變量值。如果變量是對象,可以使用點(diǎn)號(·)訪問其屬性或方法。

2、注釋
DTL用{#...#}來表示注釋,注釋的內(nèi)容不會(huì)出現(xiàn)在渲染結(jié)果里

被{#...#}注釋的內(nèi)容不能換行。要注釋多行內(nèi)容,應(yīng)使用comment標(biāo)簽
<p>姓名:{{ name }}</p>
{% comment "多行注釋" %}
<p>年齡:{{ age }}</p>
<p>日期:{{ now }}</p>
{% endcomment %}
模板中年齡和日期被包含在注釋中,在渲染時(shí)會(huì)被忽略。例如,在視圖中使用該模板的示例代碼
def testTemplate(request):
time=datetime.today()
c={'name':"小鐳",'age':999,'now':time}
return render(request,'testtem.html',c)
瀏覽器顯示的渲染結(jié)果如圖:
3、過濾器
過濾器用于改變變量的顯示結(jié)果。常用的過濾器有如下3個(gè):
(1)default:設(shè)置變量為false或?yàn)榭諘r(shí)顯示的替代值。基本格式為{{變量|default:替代值}}
(2)length:返回字符串或列表長度?;靖袷綖閧{變量|length}}
(3)filesizeformat:將數(shù)值轉(zhuǎn)換為文件大小格式,如1.1KB?;靖袷綖閧{變量|filesizeformat}}

(Django提供了60多個(gè)內(nèi)置模塊過濾器 )
4、標(biāo)簽:include
標(biāo)簽用于完成一些更復(fù)雜的操作。如包含模塊,控制流程,創(chuàng)建輸出文本或?qū)崿F(xiàn)模板繼承。
include標(biāo)簽用于包含模塊,將其他模板代碼插入當(dāng)前位置,并使用當(dāng)前模板的上下文進(jìn)行渲染。
include標(biāo)簽的基本格式為:
{%include 模塊名稱%}
模塊名稱可以是字符串或者字符串變量。例如,模板文件testtemm.html代碼
模板A:{{data|default:'nothing'}}<br>
模板文件testtem1.html代碼
{%include 'testtemm.html'%}
模板B:當(dāng)前日期:{%now "Y 年 m 月 d 日 H:i:s"%}
下面的試圖使用模板testtem.html
def testTemplate1(request):
return render(request,'testtem1.html',{'data':123})
模塊testtem.html中使用了{(lán)%now%}標(biāo)簽獲得指定格式的當(dāng)前日期字符串。瀏覽器顯示渲染結(jié)果:
可在包含模塊時(shí)指定參數(shù),
{%include 'testtemm.html' with name='小鐳'%}
with之后連接的是參數(shù),參數(shù)名與模板中的變量名一致。在傳遞多個(gè)參數(shù)時(shí),使用空格作為分隔符
{%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、標(biāo)簽: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})
瀏覽器顯示的渲染結(jié)果如圖:

可以使用reversed表示反向循環(huán)
{%for r in data reversed%}
將上面的模板文件 test1.html中的for標(biāo)簽改為反向循環(huán)后,渲染結(jié)果(使用反向循環(huán)的渲染結(jié)果):

對于包含子列表的列表變量,for標(biāo)簽可將子列表映射到獨(dú)立變量,
<ul>
{% for a,b,c,d in data %}
<li>
{{ a }},{},{{ c }},{{ d }}
</li>
{% endfor %}
</ul>

對于字典對象,for標(biāo)簽可分別映射鍵和值。例如,字典對象{'name':“小鐳”,‘a(chǎn)ge':999}可用下面的模板:
<ul>
{% for key,value in data.items %}
<li>
{{ key }}={{ value }}
</li>
{% endfor %}
</ul>
渲染結(jié)果如圖:

可在for標(biāo)簽塊的內(nèi)部使用{% empty %}, 它表示當(dāng)要遍歷的對象不存在或?yàn)榭諘r(shí)輸出的內(nèi)容。
示例:
<ul>
{% for key,value in data1.items %}
<li>
{{ key }}={{ value }}
</li>
{% empty %}
在上下文中沒找到字典對象,或者data為空
{% endfor %}
</ul>
因?yàn)閐ata1為空字典,所以使用{%empty%}

6、標(biāo)簽:if
if標(biāo)簽用于構(gòu)造條件分支,其基本結(jié)構(gòu)如下
{% if var1 %}
..
{% elif var2 %}
..
{% else %}
..
{% endif %}
elif和else塊可以省略,elif塊可以有多個(gè)。Django按先后順序依次計(jì)算if和elif標(biāo)簽的變量,如果變量為“真”(及變量存在,不為空、且不是False),則輸出相應(yīng)的數(shù)據(jù)塊,且流程跳轉(zhuǎn)到endif標(biāo)簽后。如果沒有變量為“真”,則輸出else數(shù)據(jù)塊(如果else數(shù)據(jù)塊存在的話)
例如,下面的模塊根據(jù)分?jǐn)?shù)輸出等級:
分?jǐn)?shù):{{ 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中獲得分?jǐn)?shù)(格式為正式),request。GET['data']獲得的數(shù)據(jù)默認(rèn)為字符串格式,所以需要將其轉(zhuǎn)換為整數(shù)。如果未做轉(zhuǎn)換,Django會(huì)將其作為字符串,模板將輸出else標(biāo)簽部分的數(shù)據(jù)。
運(yùn)在瀏覽器中訪問 “http://127.0.0.1:8000/test2?data=88”,輸出結(jié)果如圖所示


總結(jié)
到此這篇關(guān)于Django模塊學(xué)習(xí)之模塊語言的文章就介紹到這了,更多相關(guān)Django模塊語言內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python Fast API發(fā)布API服務(wù)的過程詳解
這篇文章主要介紹了使用Python Fast API發(fā)布API服務(wù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
pd.DataFrame中的幾種索引變換的實(shí)現(xiàn)
本文主要介紹了pd.DataFrame中的幾種索引變換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Python實(shí)現(xiàn)的文本簡單可逆加密算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的文本簡單可逆加密算法,結(jié)合完整實(shí)例形式分析了Python自定義加密與解密算法具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-05-05
Python&Matlab實(shí)現(xiàn)灰狼優(yōu)化算法的示例代碼
灰狼優(yōu)化算法是一種群智能優(yōu)化算法,它的獨(dú)特之處在于一小部分擁有絕對話語權(quán)的灰狼帶領(lǐng)一群灰狼向獵物前進(jìn)。本文具體介紹了灰狼優(yōu)化算法的兩種實(shí)現(xiàn)示例代碼,需要的可以參考一下2022-03-03

