前言
本文主要給大家介紹了關(guān)于Django自定義過濾器的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:
過濾器與函數(shù)
django過濾器的本質(zhì)是函數(shù),但"函數(shù)"太多了,為了顯示自己的與眾不同,設(shè)計(jì)者們想了個名字"過濾器"...
django有一些內(nèi)置的過濾器,但和"新手賽車"不多(把字母轉(zhuǎn)成小寫,求數(shù)組長度,從數(shù)組中取一個隨機(jī)值),功能很基礎(chǔ)(不夠強(qiáng)大)...
抱著一種"研究琢磨"的心態(tài),試著自己動手寫一個過濾器:功能很簡單,求一個數(shù)組中的最大值(今天太晚了,偷個懶哈~)
功能是很簡單的:
過濾器
先給出我的一點(diǎn)體會:
在django是MVP的架構(gòu),數(shù)據(jù)模型交給Model,邏輯處理交給View,樣式模板交給temPlate,這是公認(rèn)的合理架構(gòu).
隨著項(xiàng)目規(guī)模的增大,會出現(xiàn)一些問題,view掌管了所有的邏輯處理,一些很基礎(chǔ)的邏輯功能(比如求最大值,最小值,給用戶名加個前綴)是沒必要與核心邏輯放在一起的,不僅讓代碼顯得冗余,而且也影響核心模塊的迭代維護(hù)...
所以django的設(shè)計(jì)者,決定把一些很基礎(chǔ)通用的邏輯模塊單獨(dú)取出,放到app目錄下的templatetags文件夾內(nèi)(文件夾名字不可改,否則會django會無法識別),templatetags可以存放多個文件,每個文件可以存放多個功能相關(guān)的過濾器,使用功能相關(guān)的過濾器時,直接導(dǎo)入單個文件就可以一并使用相關(guān)功能,不愧是django,框架設(shè)計(jì)真的很贊!
具體使用規(guī)則:
1.如果對某個app下的網(wǎng)頁使用過濾器,則在對應(yīng)app的根目錄下,創(chuàng)建名為templatetags的文件夾(這里的pad為一個獨(dú)立的app)
新建目錄
2.在templatetags文件夾下,新建空文件__init__.py(這是python的規(guī)矩,__init__.py表示其所在的文件夾是一個可以載入的模塊,__init__文件內(nèi)容可為空),新建文件my_filter.py(這個文件可以存放多個過濾器,文件名字可自定義...)
新建文件
3.在my_filter.py中,先導(dǎo)入頭文件,編寫過濾器函數(shù)(這里偷個懶,直接用python的內(nèi)置函數(shù)做示范),注冊過濾器(還是喜歡裝飾器);
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from django.template import Library # 將注冊類實(shí)例化為register對象 register = Library() # 使用裝飾器注冊 @register . filter def get_list_max(val): # val為一個列表,通過過濾器取得其中的最大值 result = max (val) return result |
4.將過濾器加載到html, 使用自定義的過濾器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < title >過濾器</ title > </ head > < body > {# 加載過濾器所在的文件,由于templatetags的文件名是固定的,django可以直接找到過濾器文件所在的位置 #} {% load zhao_fillter %} {# 顯示列表數(shù)據(jù) #} 列表的數(shù)據(jù)為:{{ my_list }} < hr > {# 使用自定義的過濾器get_list_max,獲得列表中最大的值 #} 列表中的最大值為:{{ my_list | get_list_max }} </ body > </ html > |
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。
原文鏈接:http://www.jianshu.com/p/3f5d72929c8c