中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django模板語言-2:simple_tag和filter

發布時間:2020-07-13 01:52:11 來源:網絡 閱讀:293 作者:等你的破船 欄目:編程語言

標簽simple_tag:

????標簽:在HTML中使用{% %}標記

? ? 常見的系統內自帶的標簽:load、for 、if、with、csrf_token、verbatim、

????block-endblock\extends\comment-endcomment\cycle(silent)\自定義標簽


????1、with:

????????在html里給變量賦值

{%?with?name=obj.group.name%}????????#?用于長變量賦值
{{name}}???????????????????????????#?直接調ip,顯示host.name.ip的值

????2、csrf_token:

????????之前在使用form表單時,提示Forbidden:CSRF verification failed. Request aborted,

????????解決方法1、在settings里注釋掉中間件CSRF

????????解決方法2、在form表單里添加csrf_token標簽

<form?action="checkuser/"?method="post">
<input?type="text"?name="username"?placeholder="用戶名"?/>
<input?type="text"?name="password"?placeholder="密碼"?/>
<input?type="submit"?value="登?陸"?/>

{%?csrf_token?%}?{#使用此句,無需注釋掉中間件的CSRF#}???????
</form>


????3、verbatim

????????取消渲染模板標記,以文字顯示verbatim里面的內容

{%?verbatim?%}
????{{?for?i?in?[1,2,3,4]?}}
????{{?i?}}
????{{?endfor?}}
{%?endverbatim?%}

網頁顯示結果:
?{{?for?i?in?[1,2,3,4]?}}?{{?i?}}?{{?endfor?}}

? ? 4、autoescape、識別、不識別含有html標簽的字符串,默認不識別html標簽,與過濾器safe,django的mark_safe作用一樣????

????????????參數:on、off,默認on

html_str?=?"<a?href='f-t'>點我</a>"
{%?autoescape?off?%}
????{{?html_str?}}
{%?endautoescape?%}

#?結果:
點我

{%?autoescape?off?%}
????{{?html_str?}}
{%?endautoescape?%}

#?結果:
<a?href='f-t'>點我</a>

????5、comment注釋

{%?comment?%}
????此段內容不顯示在網頁上
{%?endcomment?%}

? ? 6、cycle,循環迭代,重復1到4,遇到resetcycle,重新從1開始,silent使用上一個值

{%?cycle?'1'?'2'?'3'?'4'?as?num%}
{%?cycle?num?%}
{%?cycle?num?silent?%}????????#?重復輸出2
{%?resetcycle?%}
{%?cycle?num?%}
{%?cycle?num?%}
{%?cycle?num?%}
{%?cycle?num?%}

#?應用場景:隔行變色
{%?for?i?in?list%}
<tr?class={%?cycle?'blue'?'red'?%}>lala</tr>
{%endfor%}

????7、debug輸入調試信息

{%?debug?%}

????8、firstof????輸入參數中,第一個不為空或false的參數

{%?firstof??da??'e'?'f'?%}
#?因為da是未定義的變量名,結果:?'e'



????9、自定義simple_tag:

????????3固定原則:在APP中新建包名是固定:templatetags

????????????????????????? ?在views中,Library實例化名字固定:register=template.Library()

????????????????????????? ?自定義函數,使用register.simple_tag裝飾

????????使用:在HTML上方{% load 定義的python文件%}

#?在templatetags下新建python文件,custom_tag.py

#?導入template
from?django?import?template

#?實例化
register?=?template.Library()????????#?register固定,不可變為其它名

@register.simple_tag?????????????????#?裝飾daxie
def?daxie(str1):
????#?把字符串變成大寫。
????str1?=?str(str1).upper()????
????return?str1
#?在HTML中上方載入自定義的python文件

{%?load?custom_tag?%}
{%?daxie?'WERWERFSEFkjdDFGSdfeflnnidhggindSDGSEGSFVBNHR'?%}
#?參數直接寫在simple_tag名字的后面,可以有多個

#結果#
WERWERFSEFKJDDFGSDFEFLNNIDHGGINDSDGSEGSFVBNHR

過濾器filter:

? ? 支持鏈式操作,每個結果都依次傳入下個|的過濾器

????過濾器調用格式{{ 值|過濾器名1:參數1|過濾器名2:參數2|...........}}

????????說明:

????????????????值:只能傳一個

????????????????管道符|:左右都不能帶空格

????????????????過濾器名:函數名

????????????????:左右也不能帶空格

????????????????參數:也只能傳一個,多個值可以使用加引號的字典或列表,"{'name':'david','age':19}"


? ? 1、內置過濾器有30個:add\default\length\filesizeformat\slice\date\safe\truncatechars\truncatewords\cut\join\add\urlencode

#?add?前值加
{{?30|add:'?1'|add:'?3'|add:'?2'|add:'?4'|add:'?5'?}}???#?多個|每次傳遞前面的值
#?結果:sq?1?3?2?4?5

#?urlencode還記得javascript地址轉換嗎,一樣樣的
{{?"http://127.0.0.1:8000/a/test/666"|urlencode?}}
結果:http%3A//127.0.0.1%3A8000/a/test/666

<br>
#?join?使用指定字符連接列表或字符
#?views傳入{'ls':[122,111,555]}
{{?ls|join:'@'?}}
結果:122@111@555

{{?'1????2232'|join:'-'?}}
結果:1-?-?-?-?-2-2-3-2

<br>
#?cut?從字符串中刪除指定字符串
{{?'1112312312311221313'|cut:'23'?}}
結果:1111111221313

<br>
#?truncatechars從第n個字符刪除
{{?'1234567890'|truncatechars:2?}}
結果:1...

<br>
#?truncatewords?以空格計算單詞個數,保留n個單詞
{{?'123?456?78?90'|truncatewords:2?}}
結果:123?456?…

<br>
#?safe變量值是安全的,使HTML字符串轉義,link?=?"<p><a?
{{?link?}}
{#結果:<p><a?>超鏈接</a>?</p>#}
{{?link|safe?}}
結果:超鏈接

<br>
#?date?格式化日期,傳入的是datetime.datetime.now()
{{?dt|date:"Y-m-d?H:i:s"?}}
#?結果:2019-10-11?14:58:16
{{?dt|date?}}
#?結果:Oct.?11,?2019

<br>
#?slice切片:
{{?'0123456'|slice:"0:3"?}}
#?結果:0123

<br>
#?filesizeformat,將數值轉換為計算機單位
{{?1000|filesizeformat?}}???#?1000?bytes
{{?10000|filesizeformat?}}??#?9.8?KB
{{?1000000000|filesizeformat?}}?#?953.7?MB

<br>
#?default?如果前面的變量為空或不存在,顯示默認值,不改變sname的值
{{?sname|default:'none'?}}
#?結果:?none

<br>
#?length?返回長度
{{?'abc'|length?}}


? ??2、自定義filter:

????????定義方式與simple_tag一樣,調用方式不一樣。

? ? ????4固定原則:在APP中新建包名是固定:templatetags

????????????????????????? ?在views中,Library實例化名字固定:register=template.Library()

????????????????????????? ?HTML里調用格式固定

????????????????????????? ?自定義函數,使用register.filter裝飾

????????????????????????? ?只能使用兩個值,通常一個是修飾前,一個是修飾參數

????????使用:在HTML上方{% load 定義的python文件%}

????????調用:使用{{}}調用 ,格式:{{ str|filtername:args }}

#?在templatetags下新建python文件,custom_filter.py

from?django?import?template???????????????????????#?導入template模塊
register?=?template.Library()??????????????????????#?實例化,名字必須是register

@register.filter
def?filter_ellipsis(str1,?args1):?????????#?最多兩個參數
????#?把str1截取args1長度并加...返回給前端
????if?len(str1)?>?args1:
????????str1?=?str1[:args1]?+?r"..."
????return?str1

????????在HTML中上方載入自定義的python文件

{%?load?custom_tag?%}
{{?"01234567890123456789012345678901234567890123456789"|filter_ellipsis:20?}}

#?結果:
01234567890123456789...



Filter與simple_tag區別:

????1、HTML標記不一樣,filter使用{{}},tag使用{%%}

????2、filter可以在if/for里用于條件判斷,tag不可以

????3、filter最多傳兩個參數,tag可以多個




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴仁县| 济宁市| 开江县| 屏东市| 嘉义市| 尉犁县| 武宣县| 曲沃县| 沙洋县| 华容县| 古田县| 错那县| 连山| 墨竹工卡县| 镇远县| 龙泉市| 团风县| 镇巴县| 云南省| 靖州| 台山市| 五莲县| 兰溪市| 大石桥市| 库尔勒市| 内黄县| 黑龙江省| 正镶白旗| 类乌齐县| 新昌县| 景东| 增城市| 同江市| 墨竹工卡县| 镇远县| 漠河县| 巨鹿县| 韶山市| 财经| 柞水县| 九龙县|