久久96国产精品久久久-久久发布国产伦子伦精品-久久精品国产精品青草-久久天天躁夜夜躁狠狠85麻豆

技術員聯盟提供win764位系統下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

Django中如何利用filter與simple_tag為前端自定義函數

來源:技術員聯盟┆發布時間:2017-07-22 00:00┆點擊:

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

定制完后臺功能后,就可以在模板文件中調用函數功能,首選需要在模板文件頭中引入后臺python模塊。

{% load app01_func %}

例如我們需要判斷后臺返回值load是否為一個有效數字時,可以做如下調用:

{% if load|value_verification %} {{ load }} is a valid int number. {% else %} {{ load }} is letter. {% endif %}

simple_tag

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"}}

這里即向后端傳遞了兩個參數,一個是load,另一個是100,后端也要為函數指定好形參:

def value_verification(value, custom): # 配置好形參 ...

simple_tag中可以指定多個形參,前臺的調用方式如下:

{% 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下面,否則無法生效。