這篇文章主要為大家介紹了Django中利用filter與simple_tag為前端自訂函數的實作方法,文中透過範例程式碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
前言
Django的模板引擎提供了一般性的功能函數,透過前端可以實現多數的程式碼邏輯功能,這裡稱之為一般性,是因為它僅支援大多數常見情況下的函數功能,例如if判斷,ifequal對比返回值等,但是稍微複雜一些的函數功能並不支持,例如通過模板來判斷一個傳回值是否是合法的數字類型,此時如果又不希望透過後台視圖程式碼來實現的話,我們就可以自訂一些前端函數功能。
Django為我們提供了兩種方式,分別是filter和simple_tag,下面比較兩種方式,分別實作判斷傳回值的功能函數。
# 1、應用程式必須註冊到settings設定檔中
2、在應用目錄下建立templatetags目錄
3、在templatetags建立模組文件,並匯入Django內部方法
filter
在templatetags目錄下建立python模組,這裡命名為app01_func.py,內容如下:
#
from django import template from django.template.defaultfilters import stringfilter register = template.Library() @register.filter def value_verification(value): # value为前端传递的参数 try: int(value) return True except: return False
{% load app01_func %}
{% if load|value_verification %}
{{ load }} is a valid int number.
{% else %}
{{ load }} is letter.
{% endif %}
simple_tag的程式碼方式與filter一樣,不同的是在裝飾器部分需要呼叫simple_tag方法
#
from django import template from django.template.defaultfilters import stringfilter register = template.Library() @register.simple # 这里修改为simple_tag def value_verification(value): # value为前端传递的参数 try: int(value) return True except: return False
{% value_verification load %}
- filter 最多支援兩個參數傳遞
# - simple 支援多個參數傳遞
filter中可以透過下面的方式實現參數傳遞
{{ load | value_verification:"100"}}
def value_verification(value, custom): # 配置好形参 ...
{% value_verification load 100 200 ... %}這裡filter中最多只能接受兩個參數,但此時參數又多,又不想使用simple_tag的情況下,可以將多個參數以特定字元拼接成一個
字串傳遞給後端,後端透過split方式同樣能取得多個參數。
對比總結
透過simple_tag和filter可以完成模板引擎無法完成的某些事情,filter將我們指定的函數變成了傳回值可執行的方法,simple_tag將函數功能變成標籤功能,例如if、ifequal等,同樣呼叫方式也不同,比較如下:
{{ load | value_verification }} # filter {% value_verification load %} # simple_tag###因為呼叫方式的不同,如果傳回值需要做為if或ifequal判斷依據的話,這裡只能使用filter方法了,stringfilter方法可以實現將接收到的所有參數變成字串型,同register裝飾器一樣引用到函數方法上即可,這裡注意要放在register下面,否則無法生效。 ###
以上是詳解Django中用filter與simple_tag為前端定義函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!