html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...
1. 模板介紹
1.1 模板的功能
產(chǎn)生html,控制頁(yè)面上展示的內(nèi)容。模板文件不僅僅是一個(gè)html文件。
模板文件包含兩部分內(nèi)容:
靜態(tài)內(nèi)容:css、js、html。
動(dòng)態(tài)內(nèi)容:用于動(dòng)態(tài)去產(chǎn)生一些頁(yè)面內(nèi)容。通過模板語言來產(chǎn)生。
1.2 模板文件的使用
通常是在視圖函數(shù)中使用模板產(chǎn)生html內(nèi)容返回給客戶端。
加載模板文件loader.get_template,獲取模板文件的內(nèi)容,產(chǎn)生一個(gè)模板對(duì)象。
定義模板上下文RequeseContext,給模板文件傳遞數(shù)據(jù)。
模板渲染產(chǎn)生html頁(yè)面內(nèi)容render,用傳遞的數(shù)據(jù)替換相應(yīng)的變量,產(chǎn)生一個(gè)替換后的標(biāo)準(zhǔn)的html內(nèi)容。
1.3 模板文件加載順序
首先去配置的模板目錄下面去找模板文件。
去INSTALLED_APPS下面的每個(gè)應(yīng)用的templates去找模板文件,前提是應(yīng)用中必須有templates文件夾。
2. 模板語言
2.1 變量
模板變量的作用是計(jì)算并輸出,變量名必須由字母、數(shù)字、下劃線(不能以下劃線開頭)和點(diǎn)組成。
語法如下:
{{變量}}
當(dāng)模版引擎遇到點(diǎn)如book.title,會(huì)按照下列順序解析:
1.字典book['title']
2.先屬性后方法,將book當(dāng)作對(duì)象,查找屬性title,如果沒有再查找方法title()
3.如果是格式為book.0則解析為列表book[0]
如果變量不存在則插入空字符串''。
在模板中調(diào)用方法時(shí)不能傳遞參數(shù)。
例如:
{{book.btitile}}
首先把book當(dāng)成一個(gè)字典,把btitle當(dāng)成鍵名,進(jìn)行取值book['btitle']。
把book當(dāng)成一個(gè)對(duì)象,把btitle當(dāng)成屬性,進(jìn)行取值book.btitle。
把book當(dāng)成一個(gè)對(duì)象,把btitle當(dāng)成對(duì)象的方法,進(jìn)行取值book.btitle。
例如:
{{book.0}}
首先把book當(dāng)成一個(gè)字典,把0當(dāng)成鍵名,進(jìn)行取值book[0]。
把book當(dāng)成一個(gè)列表,把0當(dāng)成下標(biāo),進(jìn)行取值book[0]。
如果解析失敗,則產(chǎn)出內(nèi)容時(shí)用空字符串填充模板變量。
使用模板變量時(shí),前面的困難是一個(gè)字典,可能是一個(gè)對(duì)象,還可能是一個(gè)列表。
2.2 標(biāo)簽
語法如下:
{%代碼段%}
for標(biāo)簽語法如下:
{%for item in 列表%}
循環(huán)邏輯
{{forloop.counter}}表示當(dāng)前是第幾次循環(huán),從1開始
{%empty%}
列表為空或不存在時(shí)執(zhí)行此邏輯
{%endfor%}
if標(biāo)簽語法如下:
{%if ...%}
邏輯1
{%elif ...%}
邏輯2
{%else%}
邏輯3
{%endif%}
比較運(yùn)算符如下:
運(yùn)算符左右兩端不能緊挨變量或常量,必須有空格。
==
!=
<
>
<=
>=
布爾運(yùn)算符如下:
and
or
not
2.3 過濾器
語法如下:
使用管道符號(hào)|來應(yīng)用過濾器,用于進(jìn)行計(jì)算、轉(zhuǎn)換操作,可以使用在變量、標(biāo)簽中。
如果過濾器需要參數(shù),則使用冒號(hào):傳遞參數(shù)。
變量|過濾器:參數(shù)
長(zhǎng)度length,返回字符串包含字符的個(gè)數(shù),或列表、元組、字典的元素個(gè)數(shù)。
默認(rèn)值default,如果變量不存在時(shí)則返回默認(rèn)值。
data|default:'默認(rèn)值'
日期date,用于對(duì)日期類型的值進(jìn)行字符串格式化,常用的格式化字符如下:
Y表示年,格式為4位,y表示兩位的年。
m表示月,格式為01,02,12等。
d表示日, 格式為01,02等。
j表示日,格式為1,2等。
H表示時(shí),24進(jìn)制,h表示12進(jìn)制的時(shí)。
i表示分,為0-59。
s表示秒,為0-59。
value|date:"Y年m月j日 H時(shí)i分s秒"
2.4 注釋
在模板中使用如下模板注釋,這段代碼不會(huì)被編譯,不會(huì)輸出到客戶端; html注釋只能注釋html內(nèi)容,不能注釋模板語言。
單行注釋語法如下:
{#...#}
注釋可以包含任何模版代碼,有效的或者無效的都可以。
{#{ % if foo % }bar{ % else % } #}
多行注釋使用comment標(biāo)簽,語法如下:
{%comment%}
...
{%endcomment%}
3. 模板繼承
模板繼承和類的繼承含義是一樣的,主要是為了提高代碼重用,減輕開發(fā)人員的工作量。
典型應(yīng)用:網(wǎng)站的頭部、尾部信息。
3.1 父模板
如果發(fā)現(xiàn)在多個(gè)模板中某些內(nèi)容相同,那就應(yīng)該把這段內(nèi)容定義到父模板中。
標(biāo)簽block:用于在父模板中預(yù)留區(qū)域,留給子模板填充差異性的內(nèi)容,名字不能相同。 為了更好的可讀性,建議給endblock標(biāo)簽寫上名字,這個(gè)名字與對(duì)應(yīng)的block名字相同。父模板中也可以使用上下文中傳遞過來的數(shù)據(jù)。
{%block 名稱%}
預(yù)留區(qū)域,可以編寫默認(rèn)內(nèi)容,也可以沒有默認(rèn)內(nèi)容
{%endblock 名稱%}
3.2 子模板
標(biāo)簽extends:繼承,寫在子模板文件的第一行。
{% extends "父模板路徑"%}
子模版不用填充父模版中的所有預(yù)留區(qū)域,如果子模版沒有填充,則使用父模版定義的默認(rèn)值。
填充父模板中指定名稱的預(yù)留區(qū)域。
{%block 名稱%}
實(shí)際填充內(nèi)容
{{block.super}}用于獲取父模板中block的內(nèi)容
{%endblock 名稱%}
4. HTML轉(zhuǎn)義
模板對(duì)所有傳遞的文字進(jìn)行輸出時(shí),合并以下字符自動(dòng)轉(zhuǎn)義。
小于號(hào)< 轉(zhuǎn)換為 <
大于號(hào)> 轉(zhuǎn)換為 >
單引號(hào)' 轉(zhuǎn)換為 '
雙引號(hào)" 轉(zhuǎn)換為 "
與符號(hào)& 轉(zhuǎn)換為 &
過濾器escape可以實(shí)現(xiàn)對(duì)變量的html轉(zhuǎn)義,默認(rèn)模板就會(huì)轉(zhuǎn)義,一般省略。
{{t1|escape}}
過濾器safe:局部轉(zhuǎn)義,告訴模板這個(gè)變量是安全的,可以解釋執(zhí)行。
{{data|safe}}
標(biāo)簽autoescape:設(shè)置一段代碼都局部轉(zhuǎn)義,接受on,off參數(shù)。
{%autoescape off%}
...
{%endautoescape%}
模板硬編碼中的字符串默認(rèn)不會(huì)經(jīng)過轉(zhuǎn)義,如果需要轉(zhuǎn)義,那需要手動(dòng)進(jìn)行轉(zhuǎn)義。
總結(jié)
以上是生活随笔為你收集整理的html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 真我GT5 Pro价格曝光 新骁龙+IM
- 下一篇: 钉钉群怎么加入