Django中利用filter與simple_tag為前端自定義函數(shù)的實(shí)現(xiàn)方法
前言
Django的模板引擎提供了一般性的功能函數(shù),通過前端可以實(shí)現(xiàn)多數(shù)的代碼邏輯功能,這里稱之為一般性,是因?yàn)樗鼉H支持大多數(shù)常見情況下的函數(shù)功能,例如if判斷,ifequal對(duì)比返回值等,但是稍微復(fù)雜一些的函數(shù)功能并不支持,例如通過模板來判斷一個(gè)返回值是否是合法的數(shù)字類型,此時(shí)如果又不希望通過后臺(tái)視圖代碼來實(shí)現(xiàn)的話,我們就可以自定義一些前端函數(shù)功能。
Django為我們提供了兩種方式,分別是filter和simple_tag,下面對(duì)比兩種方式,分別實(shí)現(xiàn)判斷返回值的功能函數(shù)。
準(zhǔn)備工作
1、應(yīng)用程序必須要注冊(cè)到settings配置文件中
2、在應(yīng)用目錄下創(chuàng)建templatetags目錄
3、在templatetags創(chuàng)建模塊文件,并導(dǎo)入Django內(nèi)部方法
filter
在templatetags目錄下創(chuàng)建python模塊,這里命名為app01_func.py,內(nèi)容如下:
from django import template from django.template.defaultfilters import stringfilter register = template.Library() @register.filter def value_verification(value): # value為前端傳遞的參數(shù) try: int(value) return True except: return False
定制完后臺(tái)功能后,就可以在模板文件中調(diào)用函數(shù)功能,首選需要在模板文件頭中引入后臺(tái)python模塊。
{% load app01_func %}
例如我們需要判斷后臺(tái)返回值load是否為一個(gè)有效數(shù)字時(shí),可以做如下調(diào)用:
{% if load|value_verification %} {{ load }} is a valid int number. {% else %} {{ load }} is letter. {% endif %}
simple_tag
simple_tag的代碼方式與filter一樣,不同的是在裝飾器部分需要調(diào)用simple_tag方法
from django import template from django.template.defaultfilters import stringfilter register = template.Library() @register.simple # 這里修改為simple_tag def value_verification(value): # value為前端傳遞的參數(shù) try: int(value) return True except: return False
同時(shí)前端的調(diào)用方式也需要改為
{% value_verification load %}
傳遞參數(shù)
- filter 最多支持兩個(gè)參數(shù)傳遞
- simple 支持多個(gè)參數(shù)傳遞
filter中可以通過下面的方式實(shí)現(xiàn)參數(shù)傳遞
{{ load | value_verification:"100"}}
這里即向后端傳遞了兩個(gè)參數(shù),一個(gè)是load,另一個(gè)是100,后端也要為函數(shù)指定好形參:
def value_verification(value, custom): # 配置好形參 ...
simple_tag中可以指定多個(gè)形參,前臺(tái)的調(diào)用方式如下:
{% value_verification load 100 200 ... %}
這里filter中最多只能接受兩個(gè)參數(shù),但此時(shí)參數(shù)又多,又不想使用simple_tag的情況下,可以將多個(gè)參數(shù)用特定字符拼接成一個(gè)字符串傳遞給后端,后端通過split方式同樣能獲取多個(gè)參數(shù)。
對(duì)比總結(jié)
通過simple_tag和filter可以完成模板引擎無法完成的某些事情,filter將我們指定的函數(shù)變成了返回值可執(zhí)行的方法,simple_tag將函數(shù)功能變?yōu)闃?biāo)簽功能,例如if、ifequal等,同樣調(diào)用方式也不同,對(duì)比如下:
{{ load | value_verification }} # filter {% value_verification load %} # simple_tag
因?yàn)檎{(diào)用方式的不同,如果返回值需要做為if或ifequal判斷依據(jù)的話,這里只能使用filter方法了,stringfilter方法可以實(shí)現(xiàn)將接收到的所有參數(shù)變?yōu)樽址愋停瑀egister裝飾器一樣引用到函數(shù)方法上即可,這里注意要放在register下面,否則無法生效。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢
- Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法
- 在Django的URLconf中進(jìn)行函數(shù)導(dǎo)入的方法
- 利用Django框架中select_related和prefetch_related函數(shù)對(duì)數(shù)據(jù)庫查詢優(yōu)化
- 用實(shí)例詳解Python中的Django框架中prefetch_related()函數(shù)對(duì)數(shù)據(jù)庫查詢的優(yōu)化
- Django中F函數(shù)的使用示例代碼詳解
相關(guān)文章
Python辦公自動(dòng)化之CSV文件的運(yùn)用和管理
Python辦公?動(dòng)化是利?Python編程語?來創(chuàng)建腳本和程序,以簡化、加速和?動(dòng)化?常辦公任務(wù)和?作流程的過程,本文主要來介紹一下如何利用Python進(jìn)行CSV文件的運(yùn)用和管理,感興趣的可以了解下2023-12-12Python實(shí)現(xiàn)二維數(shù)組輸出為圖片
下面小編就為大家分享一篇Python實(shí)現(xiàn)二維數(shù)組輸出為圖片,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python參數(shù)解析器configparser簡介
configparser是python自帶的配置參數(shù)解析器,可以用于解析.config文件中的配置參數(shù),ini文件中由sections(節(jié)點(diǎn))-key-value組成,這篇文章主要介紹了Python參數(shù)解析器configparser,需要的朋友可以參考下2022-12-12Python?Flask-Login構(gòu)建強(qiáng)大的用戶認(rèn)證系統(tǒng)實(shí)例探究
這篇文章主要為大家介紹了Python?Flask-Login構(gòu)建強(qiáng)大的用戶認(rèn)證系統(tǒng)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python猜解網(wǎng)站數(shù)據(jù)庫管理員密碼的腳本
這篇文章主要和大家分享一個(gè)Python腳本,可以實(shí)現(xiàn)猜解網(wǎng)站數(shù)據(jù)庫管理員的密碼。文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2022-02-02使用Python制作一個(gè)數(shù)據(jù)預(yù)處理小工具(多種操作一鍵完成)
這篇文章主要介紹了使用Python制作一個(gè)數(shù)據(jù)預(yù)處理小工具(多種操作一鍵完成),本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02詳解Python如何循環(huán)遍歷Numpy中的Array
Numpy是Python中常見的數(shù)據(jù)處理庫,是數(shù)據(jù)科學(xué)中經(jīng)常使用的庫。在本文中,我們將學(xué)習(xí)如何迭代遍歷訪問矩陣中的元素,需要的可以參考一下2022-04-04