Django學習6 DTL常用過濾器及模板結構優化

2021-10-04 06:06:44 字數 3106 閱讀 6031

目錄

一、為什麼要有過濾器?

二、常用過濾器

1.常用過濾器add

2.常用過濾器cut 

3.常用過濾器date

4.常用過濾器default

5.常用過濾器first、last

6.常用過濾器floatformat

7.常用過濾器striptags

8.常用過濾器runcatechars

三、自定義模板過濾器

四、模板結構優化

dtl中不支援函式,過濾器相當於函式,可以接收引數,最多傳入兩個引數

過濾器使用格式:},value代表在views.py中定義的傳入模板的引數,filter代表各種過濾器

作用:用來在模板裡傳遞引數的函式,在python中用()放引數,但是模板裡不支援,add將傳進來的引數新增到原來的值上邊:

方式1.首先會將傳過來的引數和原來的值轉換成整形,如果轉換成功,則整形相加,返回結果

方式2.若轉換整形失敗,則進行字串拼接

使用方法:在html檔案中:

按照方式1在html中對兩個整數的處理:

}

在views.py中進行對模板的引用: 

def add_view(request):

return render(request,'add.html')

在urls.py 中增加乙個對映: 

按照方式2,將兩個列表拼接在一起,起到傳遞引數到模板的作用

作用:移除指定字元

使用方法:}

views.py中定義乙個新的函式,並且對映到url

當列表、字典為空時,或者為null時,在獲取其值的時候給乙個初始值

作用:可以獲取列表的第乙個、最後乙個值

用法:},},其中value為列表名

可以四捨五入保留小數,預設為一位小數

用法:去掉引數中的html標籤,如下,在view.py中有檢視函式,定義了乙個帶有標籤的值

def striptags_view(request):

context =

return render(request,'index.html',context=context)

在html的body中,有},最後顯示去掉了標籤的內容,如果不加striptags過濾器,就會顯示出value裡的標籤

作用:用來切割字串並且最後顯示...的,

需要知道,模板裡做多有兩個引數,"|"前邊的是被過濾的引數,"|"後邊的是過濾的條件

1.index.html渲染

2.檢視函式將被過濾的引數傳到模板

比如這個檢視函式將「張三」傳給了index.html

def myfilter_view(request):

context =

return render(request,'index.html',context=context)

3.使用過濾器,即呼叫自己寫的函式並傳遞引數給函式,將被過濾的資料傳給函式第乙個引數,過濾器右邊的值傳給函式第二個引數

比如以下index.html**,先要在開頭載入自己寫的過濾器,myfilter是放在templatetags下的自己編寫的過濾器的python檔名稱。在使用的時候,}中,value就要傳給myfilter.py裡自己編寫的過濾器函式greet的value引數,過濾器右邊的「你好!」就傳給了引數名為word的引數,然後執行函式的功能,即把兩個字串拼接在一起,最後顯示結果。

}

自己編寫過濾器的步驟

2.在資料夾中新建乙個python檔案,檔案名字即模板裡需要載入的名字

3. 匯入template包,對函式greet進行註冊:register = template.library()

4.寫乙個功能函式,即把兩個字串拼接在一起,此功能即過濾器的功能

5.註冊過濾器register.filter(「greet」,greet),左邊引數為過濾器的名稱,右邊引數是功能函式的名稱

或者直接在函式上邊加一行@register.filter,就會自動把底下的函式當做過濾器註冊,過濾器名即為函式名

from django import template

register = template.library()

def greet(value,word):

return value + word

register.filter("greet",greet)

最後結果:

引入模板

繼承模板

32 Django模板 DTL常用過濾器(1)

為什麼需要過濾器 因為在dtl中,不支援函式的呼叫形式 因此不能給函式傳遞引數,這將有很大的侷限性。而過濾器其實就是乙個函式,可以對需要處理的引數進行處理,並且還可以額外置收乙個引數 也就是說,最多只能由2個引數 add過濾器 將傳進來的引數新增到原來的值上面。這個過濾器會嘗試將值和引數轉換成整形然...

036 DTL常用過濾器(5)

slice過濾器 類似於 python 中的切片操作。示例 如下 以上 將會給 some list 從 2 開始做切片操作。stringtags過濾器 刪除字串中所有的 html 標籤。示例 如下 如果 value 是hello world,那麼以上 將會輸出 hello world truncat...

035 DTL常用過濾器(4)

join過濾器 類似與 python 中的 join 將列表 元組 字串用指定的字元進行拼接。示例 如下 如果 value 是等於 a b c 那麼以上 將輸出 a b c length過濾器 獲取乙個列表 元組 字串 字典的長度。示例 如下 如果 value 是等於 a b c 那麼以上 將輸出 ...