Web開(kāi)發(fā)(六)Django模板標(biāo)簽

一程拭、變量

模板語(yǔ)法:

view:{"HTML變量名" : "views變量名"}

HTML:{{變量名}}

views.py 文件代碼:

from?django.shortcuts?import?render

def?runoob(request):

? ? ?views_name?=?"模板標(biāo)簽"

?????return?render(request,"runoob.html",?{"name":views_name})

templates 中的 runoob.html文件代碼 :

<p>{{ name }}</p>

再次訪(fǎng)問(wèn) http://127.0.0.1:8000/runoob寸五,可以看到頁(yè)面:

二招刹、列表

templates 中的 runoob.html中,可以用?.?索引下標(biāo)取出對(duì)應(yīng)的元素鱼炒。

views.py 文件代碼:

from?django.shortcuts?import?render

def?runoob(request):

????views_list?=?["模板標(biāo)簽1","模板標(biāo)簽2","模板標(biāo)簽3"]

????return?render(request,?"runoob.html",?{"views_list": views_list})

templates 中的 runoob.html文件代碼:

<p>{{ views_list }}</p>? ? # 取出整個(gè)列表

<p>{{ views_list.0 }}</p>? # 取出列表的第一個(gè)元素

三渠鸽、字典

templates 中的 runoob.html中读虏,可以用?.key 取出對(duì)應(yīng)的值。

views.py 文件代碼:

from?django.shortcuts?import?render

def?runoob(request):

????views_dict?=?{"name":"模板標(biāo)簽"}

????return?render(request,?"runoob.html",?{"views_dict": views_dict})

templates 中的 runoob.html文件代碼:

<p>{{ views_dict }}</p>

<p>{{ views_dict.name }}</p>

四墨缘、過(guò)濾器

模板語(yǔ)法:

{{ 變量名 | 過(guò)濾器:可選參數(shù) }}

模板過(guò)濾器可以在變量被顯示前修改它星虹,過(guò)濾器使用管道字符,如下所示:

{{ name | lower }}

{{ name }} 變量被過(guò)濾器 lower 處理后镊讼,文檔大寫(xiě)轉(zhuǎn)換文本為小寫(xiě)宽涌。

過(guò)濾管道可以被* 套接* ,既是說(shuō)狠毯,一個(gè)過(guò)濾器管道的輸出又可以作為下一個(gè)管道的輸入:

{{ my_list | first | upper }}? ? ?實(shí)例第一個(gè)元素將其轉(zhuǎn)化為大寫(xiě)护糖。

有些過(guò)濾器有參數(shù)。 過(guò)濾器的參數(shù)跟隨冒號(hào)之后并且總是以雙引號(hào)包含嚼松。 例如:

{{ bio | truncatewords:"30" }}? ??這個(gè)將顯示變量 bio 的前30個(gè)詞

其他過(guò)濾器:

addslashes : 添加反斜杠到任何反斜杠嫡良、單引號(hào)或者雙引號(hào)前面。

date : 按指定的格式字符串參數(shù)格式化 date 或者 datetime 對(duì)象献酗,格式?Y-m-d H:i:s 返回?年-月-日 小時(shí):分鐘:秒?的格式時(shí)間

{{ pub_date | date:"Y-m-d" }}

length :返回變量的長(zhǎng)度寝受,適用于字符串和列表。字典返回的是鍵值對(duì)的數(shù)量罕偎,集合返回的是去重后的長(zhǎng)度

default:為變量提供一個(gè)默認(rèn)值很澄。如果 views 傳的變量的布爾值是 false,則使用指定的默認(rèn)值颜及。

值為False:0甩苛、0.0、False俏站、0j讯蒲、""、[]肄扎、()墨林、set()、{}犯祠、None

{{ name | default:"默認(rèn)值False" }}

filesizeformat:以更易讀的方式顯示文件的大行竦取(即'13 KB', '4.1 MB', '102 bytes'等)。字典返回的是鍵值對(duì)的數(shù)量衡载,集合返回的是去重后的長(zhǎng)度

truncatechars:如果字符串包含的字符總個(gè)數(shù)多于指定的字符數(shù)量搔耕,那么會(huì)被截?cái)嗟艉竺娴牟糠帧=財(cái)嗟淖址畬⒁?...?結(jié)尾

safe:將字符串標(biāo)記為安全月劈,不需要轉(zhuǎn)義度迂。要保證 views.py 傳過(guò)來(lái)的數(shù)據(jù)絕對(duì)安全藤乙,才能用 safe。和后端 views.py 的 mark_safe 效果相同惭墓。Django 會(huì)自動(dòng)對(duì) views.py 傳到HTML文件中的標(biāo)簽語(yǔ)法進(jìn)行轉(zhuǎn)義坛梁,令其語(yǔ)義失效。加 safe 過(guò)濾器是告訴 Django 該數(shù)據(jù)是安全的腊凶,不必對(duì)其進(jìn)行轉(zhuǎn)義划咐,可以讓該數(shù)據(jù)語(yǔ)義生效。

views.py 文件代碼:

from?django.shortcuts?import?render

def?runoob(request):

????views_str?=?"<a

????return?render(request,?"runoob.html",?{"views_str": views_str})

runoob.html 文件代碼:

{{ views_str | safe }}

if/else:根據(jù)條件判斷是否輸出钧萍。if/else 支持嵌套褐缠。{% if %} 標(biāo)簽接受 and , or 或者 not 關(guān)鍵字來(lái)對(duì)多個(gè)變量做判斷 风瘦,或者對(duì)變量取反( not )队魏。

基本語(yǔ)法格式:

{% if condition1 %}?

?... display 1

{% elif condition2 %}?

?... display 2

{% else %}?

?... display 3

{% endif %}

for:{% for %} 允許我們?cè)谝粋€(gè)序列上迭代,與 Python 的 for 語(yǔ)句的情形類(lèi)似,循環(huán)語(yǔ)法是 for X in Y ,Y 是要迭代的序列而 X 是在每一個(gè)特定的循環(huán)中使用的變量名稱(chēng)良瞧,每一次循環(huán)中,模板系統(tǒng)會(huì)渲染在?{% for %}?和?{% endfor %}?之間的所有內(nèi)容昧谊。

<ul>

{% for i in views_list %}

????????<li>{{ i }}</li>

{% endfor %}

</ul>

給標(biāo)簽增加一個(gè) reversed 使得該列表被反向迭代:

{% for i in views_list reversed%}

{{ i }}

{% endfor %}

可以直接用字典?.items?方法遍歷字典,用變量的解包分別獲取鍵和值:

{% for i,j in views_dict.items %}

{{ i }} {{ j }}

{% endfor %}

在 {% for %} 標(biāo)簽里可以通過(guò) {{forloop}} 變量獲取循環(huán)序號(hào):

forloop.counter: 順序獲取循環(huán)序號(hào)酗捌,從 1 開(kāi)始計(jì)算

forloop.counter0: 順序獲取循環(huán)序號(hào)呢诬,從 0 開(kāi)始計(jì)算

forloop.revcounter: 倒敘獲取循環(huán)序號(hào),結(jié)尾序號(hào)為 1

forloop.revcounter0: 倒敘獲取循環(huán)序號(hào)胖缤,結(jié)尾序號(hào)為 0

forloop.first(一般配合if標(biāo)簽使用): 第一條數(shù)據(jù)返回 True尚镰,其他數(shù)據(jù)返回 False

forloop.last(一般配合if標(biāo)簽使用): 最后一條數(shù)據(jù)返回 True,其他數(shù)據(jù)返回 False

{% for i in listvar %}

? ? {{ forloop.counter }}

? ? {{ forloop.counter0 }}

? ? {{ forloop.revcounter }}

? ? {{ forloop.revcounter0 }}

? ? {{ forloop.first }}

? ? {{ forloop.last }}

{% endfor %}

可選的 {% empty %} 從句:在循環(huán)為空的時(shí)候執(zhí)行(即 in 后面的參數(shù)布爾值為 False )哪廓。

{% for i in listvar %}? #?listvar為空

? ? {{ forloop.counter0 }}

{% empty %}

? ? 空空如也~

{% endfor %}

可以嵌套使用 {% for %} 標(biāo)簽钓猬。

ifequal/ifnotequal :{% ifequal %} 標(biāo)簽比較兩個(gè)值,當(dāng)他們相等時(shí)撩独,顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值,和 {% if %} 類(lèi)似

{% ifequal section 'sitenews' %}? # 如果section==?'sitenews'账月,返回Site News

?????<h1>Site News</h1>

{% else %}?

????<h1>No News Here</h1>

{% endifequal %}

注釋標(biāo)簽:Django 注釋使用 {# #}

include :{% include %} 標(biāo)簽允許在模板中包含其它的模板的內(nèi)容综膀。

{% include "nav.html" %}

csrf_token:csrf_token 用于form表單中,作用是跨站請(qǐng)求偽造保護(hù)局齿。如果不用{% csrf_token %}標(biāo)簽剧劝,在用 form 表單時(shí),要再次跳轉(zhuǎn)頁(yè)面會(huì)報(bào)403權(quán)限錯(cuò)誤抓歼。用了{% csrf_token %}標(biāo)簽讥此,在 form 表單提交數(shù)據(jù)時(shí)拢锹,才會(huì)成功。

解析:

首先萄喳,向服務(wù)器發(fā)送請(qǐng)求卒稳,獲取登錄頁(yè)面,此時(shí)中間件 csrf 會(huì)自動(dòng)生成一個(gè)隱藏input標(biāo)簽他巨,該標(biāo)簽里的 value 屬性的值是一個(gè)隨機(jī)的字符串充坑,用戶(hù)獲取到登錄頁(yè)面的同時(shí)也獲取到了這個(gè)隱藏的input標(biāo)簽。

然后染突,等用戶(hù)需要用到form表單提交數(shù)據(jù)的時(shí)候捻爷,會(huì)攜帶這個(gè) input 標(biāo)簽一起提交給中間件 csrf,原因是 form 表單提交數(shù)據(jù)時(shí)份企,會(huì)包括所有的 input 標(biāo)簽也榄,中間件 csrf 接收到數(shù)據(jù)時(shí),會(huì)判斷司志,這個(gè)隨機(jī)字符串是不是第一次它發(fā)給用戶(hù)的那個(gè)甜紫,如果是,則數(shù)據(jù)提交成功俐芯,如果不是棵介,則返回403權(quán)限錯(cuò)誤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吧史,一起剝皮案震驚了整個(gè)濱河市邮辽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贸营,老刑警劉巖吨述,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钞脂,居然都是意外死亡揣云,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)冰啃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)邓夕,“玉大人,你說(shuō)我怎么就攤上這事阎毅》俑眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扇调,是天一觀的道長(zhǎng)矿咕。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么碳柱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任捡絮,我火速辦了婚禮,結(jié)果婚禮上莲镣,老公的妹妹穿的比我還像新娘福稳。我一直安慰自己,他們只是感情好剥悟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布灵寺。 她就那樣靜靜地躺著,像睡著了一般区岗。 火紅的嫁衣襯著肌膚如雪略板。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天慈缔,我揣著相機(jī)與錄音叮称,去河邊找鬼。 笑死藐鹤,一個(gè)胖子當(dāng)著我的面吹牛瓤檐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娱节,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挠蛉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肄满?” 一聲冷哼從身側(cè)響起谴古,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稠歉,沒(méi)想到半個(gè)月后掰担,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怒炸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年带饱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阅羹。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勺疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捏鱼,到底是詐尸還是另有隱情恢口,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布穷躁,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏问潭。R本人自食惡果不足惜猿诸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狡忙。 院中可真熱鬧梳虽,春花似錦、人聲如沸灾茁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)北专。三九已至禀挫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓颓,已是汗流浹背语婴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驶睦,地道東北人砰左。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像场航,于是被迫代替她去往敵國(guó)和親缠导。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容