深入理解Django的自定義過(guò)濾器
前言
本文主要給大家介紹了關(guān)于Django自定義過(guò)濾器的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:
過(guò)濾器與函數(shù)
django過(guò)濾器的本質(zhì)是函數(shù),但"函數(shù)"太多了,為了顯示自己的與眾不同,設(shè)計(jì)者們想了個(gè)名字"過(guò)濾器"...
django有一些內(nèi)置的過(guò)濾器,但和"新手賽車(chē)"不多(把字母轉(zhuǎn)成小寫(xiě),求數(shù)組長(zhǎng)度,從數(shù)組中取一個(gè)隨機(jī)值),功能很基礎(chǔ)(不夠強(qiáng)大)...
抱著一種"研究琢磨"的心態(tài),試著自己動(dòng)手寫(xiě)一個(gè)過(guò)濾器:功能很簡(jiǎn)單,求一個(gè)數(shù)組中的最大值(今天太晚了,偷個(gè)懶哈~)
功能是很簡(jiǎn)單的:
過(guò)濾器
先給出我的一點(diǎn)體會(huì):
在django是MVP的架構(gòu),數(shù)據(jù)模型交給Model,邏輯處理交給View,樣式模板交給temPlate,這是公認(rèn)的合理架構(gòu).
隨著項(xiàng)目規(guī)模的增大,會(huì)出現(xiàn)一些問(wèn)題,view掌管了所有的邏輯處理,一些很基礎(chǔ)的邏輯功能(比如求最大值,最小值,給用戶(hù)名加個(gè)前綴)是沒(méi)必要與核心邏輯放在一起的,不僅讓代碼顯得冗余,而且也影響核心模塊的迭代維護(hù)...
所以django的設(shè)計(jì)者,決定把一些很基礎(chǔ)通用的邏輯模塊單獨(dú)取出,放到app目錄下的templatetags文件夾內(nèi)(文件夾名字不可改,否則會(huì)django會(huì)無(wú)法識(shí)別),templatetags可以存放多個(gè)文件,每個(gè)文件可以存放多個(gè)功能相關(guān)的過(guò)濾器,使用功能相關(guān)的過(guò)濾器時(shí),直接導(dǎo)入單個(gè)文件就可以一并使用相關(guān)功能,不愧是django,框架設(shè)計(jì)真的很贊!
具體使用規(guī)則:
1.如果對(duì)某個(gè)app下的網(wǎng)頁(yè)使用過(guò)濾器,則在對(duì)應(yīng)app的根目錄下,創(chuàng)建名為templatetags的文件夾(這里的pad為一個(gè)獨(dú)立的app)
新建目錄
2.在templatetags文件夾下,新建空文件__init__.py(這是python的規(guī)矩,__init__.py表示其所在的文件夾是一個(gè)可以載入的模塊,__init__文件內(nèi)容可為空),新建文件my_filter.py(這個(gè)文件可以存放多個(gè)過(guò)濾器,文件名字可自定義...)
新建文件
3.在my_filter.py中,先導(dǎo)入頭文件,編寫(xiě)過(guò)濾器函數(shù)(這里偷個(gè)懶,直接用python的內(nèi)置函數(shù)做示范),注冊(cè)過(guò)濾器(還是喜歡裝飾器);
from django.template import Library # 將注冊(cè)類(lèi)實(shí)例化為register對(duì)象 register = Library() # 使用裝飾器注冊(cè) @register.filter def get_list_max(val): # val為一個(gè)列表,通過(guò)過(guò)濾器取得其中的最大值 result = max(val) return result
4.將過(guò)濾器加載到html, 使用自定義的過(guò)濾器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>過(guò)濾器</title> </head> <body> {# 加載過(guò)濾器所在的文件,由于templatetags的文件名是固定的,django可以直接找到過(guò)濾器文件所在的位置 #} {% load zhao_fillter %} {# 顯示列表數(shù)據(jù) #} 列表的數(shù)據(jù)為:{{ my_list }} <hr> {# 使用自定義的過(guò)濾器get_list_max,獲得列表中最大的值 #} 列表中的最大值為:{{ my_list | get_list_max }} </body> </html>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
使用DataFrame實(shí)現(xiàn)兩表連接方式
這篇文章主要介紹了使用DataFrame實(shí)現(xiàn)兩表連接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08PyCharm搭建Spark開(kāi)發(fā)環(huán)境實(shí)現(xiàn)第一個(gè)pyspark程序
這篇文章主要介紹了PyCharm搭建Spark開(kāi)發(fā)環(huán)境實(shí)現(xiàn)第一個(gè)pyspark程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06分析并輸出Python代碼依賴(lài)的庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了分析并輸出Python代碼依賴(lài)的庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-08-08pip更新問(wèn)題的解決:'python -m pip install -
這篇文章主要介紹了pip更新問(wèn)題的解決:'python -m pip install --upgrade pip' 報(bào)錯(cuò)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04利用Python制作本地Excel的查詢(xún)與生成的程序問(wèn)題
最近遇到這樣一個(gè)項(xiàng)目需求制作一個(gè)程序有一個(gè)簡(jiǎn)單的查詢(xún)?nèi)肟趯?shí)現(xiàn)Excel的查詢(xún)與生成,今天教大家利用Python制作本地Excel的查詢(xún)與生成的程序,感興趣的朋友跟隨小編一起看看吧2022-06-06Python實(shí)現(xiàn)識(shí)別圖片內(nèi)容的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)識(shí)別圖片內(nèi)容的方法,結(jié)合實(shí)例形式分析了tesseract模塊的下載、安裝配置及使用tesseract模塊進(jìn)行圖片識(shí)別的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07在Python3中初學(xué)者應(yīng)會(huì)的一些基本的提升效率的小技巧
這篇文章主要介紹了在Python3中的一些基本的小技巧,有利于剛剛上手Python的初學(xué)者提升開(kāi)發(fā)效率,需要的朋友可以參考下2015-03-03如何使用OpenCV實(shí)現(xiàn)手勢(shì)音量控制
今天來(lái)學(xué)習(xí)一下如何使用OpenCV實(shí)現(xiàn)手勢(shì)音量控制,本次實(shí)驗(yàn)需要使用OpenCV和mediapipe庫(kù)進(jìn)行手勢(shì)識(shí)別,并利用手勢(shì)距離控制電腦音量,感興趣的朋友跟隨小編一起看看吧2023-11-11