最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django中利用filter與simple_tag為前端自定義函數(shù)的實(shí)現(xiàn)方法

 更新時(shí)間:2017年06月15日 11:52:42   作者:阿布  
這篇文章主要給大家介紹了Django中利用filter與simple_tag為前端自定義函數(shù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。

前言

Django的模板引擎提供了一般性的功能函數(shù),通過(guò)前端可以實(shí)現(xiàn)多數(shù)的代碼邏輯功能,這里稱之為一般性,是因?yàn)樗鼉H支持大多數(shù)常見情況下的函數(shù)功能,例如if判斷,ifequal對(duì)比返回值等,但是稍微復(fù)雜一些的函數(shù)功能并不支持,例如通過(guò)模板來(lái)判斷一個(gè)返回值是否是合法的數(shù)字類型,此時(shí)如果又不希望通過(guò)后臺(tái)視圖代碼來(lá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中可以通過(guò)下面的方式實(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è)字符串傳遞給后端,后端通過(guò)split方式同樣能獲取多個(gè)參數(shù)。

對(duì)比總結(jié)

通過(guò)simple_tag和filter可以完成模板引擎無(wú)法完成的某些事情,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)樽址愋?,同register裝飾器一樣引用到函數(shù)方法上即可,這里注意要放在register下面,否則無(wú)法生效。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

始兴县| 连南| 闽清县| 隆林| 江源县| 乳山市| 平阳县| 商城县| 杭锦后旗| 延吉市| 拉孜县| 万全县| 通江县| 衢州市| 泸溪县| 衡阳市| 德保县| 呼和浩特市| 靖宇县| 凤凰县| 新乐市| 咸宁市| 来安县| 离岛区| 宝山区| 广南县| 延川县| 漯河市| 澄江县| 西丰县| 宾川县| 上虞市| 东平县| 赣州市| 临武县| 湟中县| 双辽市| 井陉县| 叶城县| 博湖县| 广丰县|