Django框架有哪些過(guò)濾器-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供壽縣網(wǎng)站建設(shè)、壽縣做網(wǎng)站、壽縣網(wǎng)站設(shè)計(jì)、壽縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、壽縣企業(yè)網(wǎng)站模板建站服務(wù),10余年壽縣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Django框架有哪些過(guò)濾器,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

過(guò)濾器:(Filters)

常用過(guò)濾器介紹:

在Django的模板語(yǔ)言中,通過(guò)使用過(guò)濾器來(lái)改變變量的顯示。

過(guò)濾器的語(yǔ)法: {{ value|filter_name:參數(shù) }}

使用管道符"|"來(lái)應(yīng)用過(guò)濾器。

這里的過(guò)濾的意思實(shí)際上個(gè)人認(rèn)為概念很模糊,過(guò)濾器的意思是將變量通過(guò)使用后端的方法將變量進(jìn)行相關(guān)操作加工邏輯處理的封裝之后拿到前端去使用的一種過(guò)程實(shí)現(xiàn)。

例如:{{ name|lower }}會(huì)將name變量應(yīng)用lower過(guò)濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。

注意事項(xiàng):

##過(guò)濾器支持鏈?zhǔn)讲僮鳎匆粋€(gè)過(guò)濾器的輸出結(jié)果作為另一個(gè)過(guò)濾器的輸入

##過(guò)濾器可以接收參數(shù),例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個(gè)詞。

##過(guò)濾器參數(shù)包含空格的話,必須用引號(hào)包裹起來(lái),比如使用逗號(hào)和空格去連接一個(gè)列表中的元素,如:{{ list|join:', ' }}

##管道符‘|’左右沒(méi)有空格。一定要注意,沒(méi)有空格

Django的模板語(yǔ)言中提供了大約六十個(gè)內(nèi)置過(guò)濾器。這里主要拿出一些常見(jiàn)的方法來(lái)介紹:

#default

如果一個(gè)變量是false或空,使用給定的默認(rèn)值,否則使用該變量的值。

{{ value|default:"nothing"}}
如果value沒(méi)有傳值或者值為空的話就顯示nothing

#length

返回值的長(zhǎng)度,作用于字符串和列表

{{ value|length }}
后端:
s = 'what f**k!'
l = ['a', 'b', 4, 5, 8]
前端:
{{ l|length }}
{{ s|length }}

顯示結(jié)果:

5 10

#filesizeformat

將值格式化為一個(gè)可理解的文件大小單位(13kb,4m)

{{ value|filesizeformat }}
后端:
n = 102478450
前端:
{{ n|filesizeformat }}

顯示結(jié)果:

97.7 MB

#slice 切片(顧頭不顧尾)

{{value|slice:"開始索引:結(jié)束索引:步長(zhǎng)"}}
后端:
s = 'what f**k!'
l = ['a', 'b', 4, 5, 8]
前端:
{{ l|slice:'1:4' }} 
{{ s|slice:'5:9' }}
{{ l|slice:'2:-1' }}    <!--從索引2開始切,切到索引為-1的位置為結(jié)尾,同時(shí)顧頭不顧尾-->

顯示結(jié)果:

['b', 4, 5] 
f**k 
[4, 5]

#date 時(shí)間格式化輸出

{{ value|date:"Y-m-d H:i:s"}}
后端:
import datetime
ctime = datetime.datetime.now()
前端:
{{ ctime }}
{{ ctime|date:'Y-m-d H:i:s' }}

顯示結(jié)果:

June 11, 2019, 2:51 p.m. 
2019-06-11 14:51:24

#safe

Django的模板中會(huì)對(duì)HTML標(biāo)簽和JS等語(yǔ)法標(biāo)簽進(jìn)行自動(dòng)轉(zhuǎn)義,原因顯而易見(jiàn),這樣是為了安全。但是有的時(shí)候我們可能不希望這些HTML元素被轉(zhuǎn)義,比如我們做一個(gè)內(nèi)容管理系統(tǒng),后臺(tái)添加的文章中是經(jīng)過(guò)修飾的,這些修飾可能是通過(guò)一個(gè)類似于FCKeditor編輯加注了HTML修飾符的文本,如果自動(dòng)轉(zhuǎn)義的話顯示的就是保護(hù)HTML標(biāo)簽的源文件。為了在Django中關(guān)閉HTML的自動(dòng)轉(zhuǎn)義有兩種方式,如果是一個(gè)單獨(dú)的變量我們可以通過(guò)過(guò)濾器“|safe”的方式告訴Django這段代碼是安全的不必轉(zhuǎn)義。

后端:
value = "<a href='https://www.cnblogs.com/suguangti/'>點(diǎn)我</a>"
前端:
{{ value }}
{{ value|safe }}

結(jié)果:

<a href='https://www.cnblogs.com/suguangti/'>點(diǎn)我</a> 
點(diǎn)我
下面那個(gè)‘點(diǎn)我’在頁(yè)面上是一個(gè)a標(biāo)簽,點(diǎn)擊可跳轉(zhuǎn)

上面的safe是在前端取消轉(zhuǎn)義,后端取消轉(zhuǎn)義方法如下:

from django.utils.safestring import mark_safe
xxx = mark_safe('<h2>我是h2標(biāo)簽</h2>')

#truncatechars

如果字符串字符多于指定的字符數(shù)量,那么會(huì)被截?cái)啵財(cái)嗟氖S嘧址麑⒂檬÷蕴?hào)結(jié)尾表示。

參數(shù):截?cái)嗟淖址麛?shù)(包含三個(gè)點(diǎn))

后端:
ss = 'abcdefghijklmnopqrstuvwxyz'
前端:
{{ ss|truncatechars:10 }}

結(jié)果:(注意...也算進(jìn)長(zhǎng)度里了)

abcdefg...

#truncatewords

以一個(gè)單詞為一個(gè)元素,單詞與單詞之間的空格為區(qū)分依據(jù),將一定數(shù)量的單詞進(jìn)行截?cái)?,截?cái)嗪竺娴挠?..表示

一個(gè)單詞加上一個(gè)空格  計(jì)數(shù)一個(gè)。

后端:
sss = "Life was like a box of chocolates you never know what you're gonna get."
前端:
{{ sss|truncatewords:7 }}

顯示結(jié)果:

Life was like a box of chocolates ...
(注意chocolates后面有個(gè)空格)

#cut

移除變量中所有的指定相同的字符串

{{ value|cut:' ' }}
后端:
ssss = 'you do bb now,bb is not good thing, why do you bb for too many times!'
前端:
{{ ssss|cut:'bb' }}

顯示結(jié)果:

you do now, is not good thing, why do you for too many times!

#join

將列表中的元素用指定字符連接起來(lái)

后端
ll = [1, 2, 3, 4, 5]
前端
{{ ll|join:'@' }}

結(jié)果

1@2@3@4@5

標(biāo)簽介紹:

#for循環(huán)(內(nèi)部有個(gè)empty判斷,詳見(jiàn)下面if判斷示例)

后端
ll = [1, 2, 3, 4, 5]
前端
{% for foo in ll %}
     <p>{{ foo }}</p>
{% endfor %}

結(jié)果顯示:

1
2
3
4
5

forloop的使用:

后端
ll = [1, 2, 3, 4, 5]
前端
{% for foo in ll %}
     <p>{{ forloop }}</p>
{% endfor %}

forlop里面有幾個(gè)屬性需要我們注意,比如 counter0,counter,first,last它們對(duì)應(yīng)的值在for循環(huán)過(guò)程中的開始和結(jié)束是不一樣的

#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>嗨起來(lái)?。?!</p>
    {% endif %}
    {% empty %}   <!--如果l = [],上面的for循環(huán)不會(huì)進(jìn)行,只會(huì)走這一步-->
        <p>你給我的容器類型是個(gè)空啊,沒(méi)法for循環(huán)</p>
{% endfor %}
l = ['a', 'b', 'c', 'd', 'e']
這是我的第一次
嗨起來(lái)?。。?嗨起來(lái)?。。?嗨起來(lái)!??!
這是最后一次了啊
l = []
你給我的容器類型是個(gè)空啊,沒(méi)法for循環(huán)

3.自定義過(guò)濾器/標(biāo)簽/inclusion_tag:

必須做的三件事

1.在應(yīng)用名下新建一個(gè)名為templatetags文件夾(必須叫這個(gè)名字)

2.在該新建的文件夾內(nèi)新建一個(gè)任意名稱的py文件

3.在該py文件中需要固定寫下面兩句代碼

①這里在app01項(xiàng)目程序文件夾新建templatetags文件夾,在此文件夾內(nèi)新建一個(gè)mine.py文件,打開mine.py文件>>輸入:

from django import template
register = template.Library()
# 自定義過(guò)濾器
@register.filter(name='my_filter')
def index(a, b):
    return a*b
# 自定義標(biāo)簽:
@register.simple_tag
def plus(a, b, c):
    return a+b+c

②前端html文件內(nèi)使用過(guò)濾器或者標(biāo)簽:

{% load mine %}   <!-- 要使用自定義過(guò)濾器和標(biāo)簽,需要先加載自己定義的文件 -->
{{ 9|my_filter:11 }}  <!-- 使用自定義過(guò)濾器,注意這里需要用name的值作為使用方法 -->
{% my_tag 1 2 3 %}  <!-- 使用自定義標(biāo)簽,注意這里需要用name的值作為使用方法 -->

顯示的結(jié)果:

99
6

 自定義inclusion_tag

 inclusion_tag的作用:創(chuàng)建一個(gè)動(dòng)態(tài)的html頁(yè)面文件a.html,這個(gè)頁(yè)面文件a可以在另外一個(gè)頁(yè)面b中被調(diào)用,實(shí)現(xiàn)這個(gè)頁(yè)面a應(yīng)該有的功能。比如:

在上面的mine.py文件中創(chuàng)建inclusion_tag:

# mine.py文件  創(chuàng)建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對(duì)象列表傳進(jìn)inclusion_t_test.html文件

inclusion_t_test.html文件里面:

<!-- inclusion_t_test.html文件,被導(dǎo)入的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>

調(diào)用的html頁(yè)面文件:

{% load mine %}    <!-- 必須要先加載創(chuàng)建標(biāo)簽的文件-->
{% my_inclusion %}  <!-- 調(diào)用inclusion_t_test.html頁(yè)面文件,這里使用該標(biāo)簽的name來(lái)調(diào)用-->

上述就是小編為大家分享的Django框架有哪些過(guò)濾器了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

分享標(biāo)題:Django框架有哪些過(guò)濾器-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.muchs.cn/article44/deoeee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站導(dǎo)航、建站公司、網(wǎng)站內(nèi)鏈、云服務(wù)器營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化