首頁  >  文章  >  後端開發  >  詳解Django中用filter與simple_tag為前端定義函數

詳解Django中用filter與simple_tag為前端定義函數

零下一度
零下一度原創
2017-06-17 10:58:331046瀏覽

這篇文章主要為大家介紹了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

定製完後台功能後,就可以在範本檔案中呼叫函數功能,首選需要在範本檔案頭中引入後台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下面,否則無法生效。 ###

以上是詳解Django中用filter與simple_tag為前端定義函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn