您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Django框架有哪些過濾器,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
過濾器:(Filters)
常用過濾器介紹:
在Django的模板語言中,通過使用過濾器來改變變量的顯示。
過濾器的語法: {{ value|filter_name:參數 }}
使用管道符"|"來應用過濾器。
這里的過濾的意思實際上個人認為概念很模糊,過濾器的意思是將變量通過使用后端的方法將變量進行相關操作加工邏輯處理的封裝之后拿到前端去使用的一種過程實現。
例如:{{ name|lower }}會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。
注意事項:
##過濾器支持鏈式操作,即一個過濾器的輸出結果作為另一個過濾器的輸入
##過濾器可以接收參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
##過濾器參數包含空格的話,必須用引號包裹起來,比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
##管道符‘|’左右沒有空格。一定要注意,沒有空格
Django的模板語言中提供了大約六十個內置過濾器。這里主要拿出一些常見的方法來介紹:
#default
如果一個變量是false或空,使用給定的默認值,否則使用該變量的值。
{{ value|default:"nothing"}} 如果value沒有傳值或者值為空的話就顯示nothing
#length
返回值的長度,作用于字符串和列表
{{ value|length }} 后端: s = 'what f**k!' l = ['a', 'b', 4, 5, 8] 前端: {{ l|length }} {{ s|length }}
顯示結果:
5 10
#filesizeformat
將值格式化為一個可理解的文件大小單位(13kb,4m)
{{ value|filesizeformat }} 后端: n = 102478450 前端: {{ n|filesizeformat }}
顯示結果:
97.7 MB
#slice 切片(顧頭不顧尾)
{{value|slice:"開始索引:結束索引:步長"}} 后端: s = 'what f**k!' l = ['a', 'b', 4, 5, 8] 前端: {{ l|slice:'1:4' }} {{ s|slice:'5:9' }} {{ l|slice:'2:-1' }} <!--從索引2開始切,切到索引為-1的位置為結尾,同時顧頭不顧尾-->
顯示結果:
['b', 4, 5] f**k [4, 5]
#date 時間格式化輸出
{{ value|date:"Y-m-d H:i:s"}} 后端: import datetime ctime = datetime.datetime.now() 前端: {{ ctime }} {{ ctime|date:'Y-m-d H:i:s' }}
顯示結果:
June 11, 2019, 2:51 p.m. 2019-06-11 14:51:24
#safe
Django的模板中會對HTML標簽和JS等語法標簽進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,后臺添加的文章中是經過修飾的,這些修飾可能是通過一個類似于FCKeditor編輯加注了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML標簽的源文件。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變量我們可以通過過濾器“|safe”的方式告訴Django這段代碼是安全的不必轉義。
后端: value = "<a href='https://www.cnblogs.com/suguangti/'>點我</a>" 前端: {{ value }} {{ value|safe }}
結果:
<a href='https://www.cnblogs.com/suguangti/'>點我</a> 點我 下面那個‘點我’在頁面上是一個a標簽,點擊可跳轉
上面的safe是在前端取消轉義,后端取消轉義方法如下:
from django.utils.safestring import mark_safe xxx = mark_safe('<h2>我是h2標簽</h2>')
#truncatechars
如果字符串字符多于指定的字符數量,那么會被截斷,截斷的剩余字符將用省略號結尾表示。
參數:截斷的字符數(包含三個點)
后端: ss = 'abcdefghijklmnopqrstuvwxyz' 前端: {{ ss|truncatechars:10 }}
結果:(注意...也算進長度里了)
abcdefg...
#truncatewords
以一個單詞為一個元素,單詞與單詞之間的空格為區分依據,將一定數量的單詞進行截斷,截斷后面的用...表示
一個單詞加上一個空格 計數一個。
后端: sss = "Life was like a box of chocolates you never know what you're gonna get." 前端: {{ sss|truncatewords:7 }}
顯示結果:
Life was like a box of chocolates ... (注意chocolates后面有個空格)
#cut
移除變量中所有的指定相同的字符串
{{ value|cut:' ' }} 后端: ssss = 'you do bb now,bb is not good thing, why do you bb for too many times!' 前端: {{ ssss|cut:'bb' }}
顯示結果:
you do now, is not good thing, why do you for too many times!
#join
將列表中的元素用指定字符連接起來
后端 ll = [1, 2, 3, 4, 5] 前端 {{ ll|join:'@' }}
結果
1@2@3@4@5
標簽介紹:
#for循環(內部有個empty判斷,詳見下面if判斷示例)
后端 ll = [1, 2, 3, 4, 5] 前端 {% for foo in ll %} <p>{{ foo }}</p> {% endfor %}
結果顯示:
1 2 3 4 5
forloop的使用:
后端 ll = [1, 2, 3, 4, 5] 前端 {% for foo in ll %} <p>{{ forloop }}</p> {% endfor %}
forlop里面有幾個屬性需要我們注意,比如 counter0,counter,first,last它們對應的值在for循環過程中的開始和結束是不一樣的
#if 判斷
{% for foo in l %} if else {% if flag %} <p>flag不為空</p> {% else %} <p>flag是空</p> {% endif %} {#(l = ['a', 'b', 'c', 'd', 'e'])#} {% for foo in l %} {% if forloop.first %} <p>這是我的第一次</p> {% elif forloop.last %} <p>這是最后一次了啊</p> {% else %} <p>嗨起來!!!</p> {% endif %} {% empty %} <!--如果l = [],上面的for循環不會進行,只會走這一步--> <p>你給我的容器類型是個空啊,沒法for循環</p> {% endfor %}
l = ['a', 'b', 'c', 'd', 'e'] 這是我的第一次 嗨起來!!! 嗨起來!!! 嗨起來!!! 這是最后一次了啊 l = [] 你給我的容器類型是個空啊,沒法for循環
3.自定義過濾器/標簽/inclusion_tag:
必須做的三件事
1.在應用名下新建一個名為templatetags文件夾(必須叫這個名字)
2.在該新建的文件夾內新建一個任意名稱的py文件
3.在該py文件中需要固定寫下面兩句代碼
①這里在app01項目程序文件夾新建templatetags文件夾,在此文件夾內新建一個mine.py文件,打開mine.py文件>>輸入:
from django import template register = template.Library() # 自定義過濾器 @register.filter(name='my_filter') def index(a, b): return a*b # 自定義標簽: @register.simple_tag def plus(a, b, c): return a+b+c
②前端html文件內使用過濾器或者標簽:
{% load mine %} <!-- 要使用自定義過濾器和標簽,需要先加載自己定義的文件 --> {{ 9|my_filter:11 }} <!-- 使用自定義過濾器,注意這里需要用name的值作為使用方法 --> {% my_tag 1 2 3 %} <!-- 使用自定義標簽,注意這里需要用name的值作為使用方法 -->
顯示的結果:
99 6
自定義inclusion_tag
inclusion_tag的作用:創建一個動態的html頁面文件a.html,這個頁面文件a可以在另外一個頁面b中被調用,實現這個頁面a應該有的功能。比如:
在上面的mine.py文件中創建inclusion_tag:
# mine.py文件 創建inclusion_tag from app01 import models from django import template register = template.Library() @register.inclusion_tag('inclusion_t_test.html', name='my_inclusion') def func(): book_list = models.Book.objects.all() return {'list': book_list} #將book_list的QuerySet對象列表傳進inclusion_t_test.html文件
inclusion_t_test.html文件里面:
<!-- inclusion_t_test.html文件,被導入的html文件--> <table> <thead> <tr> <th>id</th> <th>title</th> <th>price</th> </tr> </thead> <tbody> {% for obj in list %} <tr> <td>{{ obj.id }}</td> <td>{{ obj.title }}</td> <td>{{ obj.price }}</td> </tr> {% endfor %} </tbody> </table>
調用的html頁面文件:
{% load mine %} <!-- 必須要先加載創建標簽的文件--> {% my_inclusion %} <!-- 調用inclusion_t_test.html頁面文件,這里使用該標簽的name來調用-->
上述就是小編為大家分享的Django框架有哪些過濾器了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。