您好,登錄后才能下訂單哦!
標簽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可以多個
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。