激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Django中利用filter與simple_tag為前端自定義函數的實現方法

Django中利用filter與simple_tag為前端自定義函數的實現方法

2020-11-18 00:30阿布 Python

這篇文章主要給大家介紹了Django中利用filter與simple_tag為前端自定義函數的實現方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

Django的模板引擎提供了一般性的功能函數,通過前端可以實現多數的代碼邏輯功能,這里稱之為一般性,是因為它僅支持大多數常見情況下的函數功能,例如if判斷,ifequal對比返回值等,但是稍微復雜一些的函數功能并不支持,例如通過模板來判斷一個返回值是否是合法的數字類型,此時如果又不希望通過后臺視圖代碼來實現的話,我們就可以自定義一些前端函數功能。

Django為我們提供了兩種方式,分別是filter和simple_tag,下面對比兩種方式,分別實現判斷返回值的功能函數。

準備工作

      1、應用程序必須要注冊到settings配置文件中

      2、在應用目錄下創建templatetags目錄

      3、在templatetags創建模塊文件,并導入Django內部方法

filter

在templatetags目錄下創建python模塊,這里命名為app01_func.py,內容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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模塊。

?
1
{% load app01_func %}

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

?
1
2
3
4
5
{% if load|value_verification %}
 {{ load }} is a valid int number.
{% else %}
 {{ load }} is letter.
{% endif %}

simple_tag

simple_tag的代碼方式與filter一樣,不同的是在裝飾器部分需要調用simple_tag方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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

同時前端的調用方式也需要改為

?
1
{% value_verification load %}

傳遞參數

      - filter 最多支持兩個參數傳遞

      - simple 支持多個參數傳遞

filter中可以通過下面的方式實現參數傳遞

?
1
{{ load | value_verification:"100"}}

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

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

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

?
1
{% value_verification load 100 200 ... %}

這里filter中最多只能接受兩個參數,但此時參數又多,又不想使用simple_tag的情況下,可以將多個參數用特定字符拼接成一個字符串傳遞給后端,后端通過split方式同樣能獲取多個參數。

對比總結

通過simple_tag和filter可以完成模板引擎無法完成的某些事情,filter將我們指定的函數變成了返回值可執行的方法,simple_tag將函數功能變為標簽功能,例如if、ifequal等,同樣調用方式也不同,對比如下:

?
1
2
{{ load | value_verification }} # filter
{% value_verification load %} # simple_tag

因為調用方式的不同,如果返回值需要做為if或ifequal判斷依據的話,這里只能使用filter方法了,stringfilter方法可以實現將接收到的所有參數變為字符串類型,同register裝飾器一樣引用到函數方法上即可,這里注意要放在register下面,否則無法生效。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.abuve.com/article/25

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久草在线资源观看 | videos真实高潮xxxx | 91精品国产99久久久久久 | 国产一区二区高清在线 | 国产精品视频专区 | 成人做爰高潮片免费视频韩国 | chinese xxxxhd videos麻豆 | 国内免费视频成人精品 | 亚洲国产精品久久久久久久久 | 亚洲一区国产二区 | 日日狠狠久久 | 五月天堂av91久久久 | 欧美伦交 | 99精品在线免费 | 午夜色片 | 超碰97人 | 国产精品一区二区x88av | 黄色免费影片 | 一级电影免费看 | 99亚洲| 国产在线观看91精品 | av免费在线观看不卡 | 久久国产午夜 | 黄色伊人网站 | 久色免费 | 亚洲最黄视频 | 噜噜色av| 免费国产视频在线观看 | 国产一区视频免费观看 | 欧美日韩手机在线观看 | 欧美韩国一区 | 欧美成人一二三区 | 成人黄色短视频在线观看 | 91福利影视 | 色网在线视频 | 黄色大片免费网站 | 国产欧美精品一区二区三区四区 | 天天舔夜夜操 | 日本在线不卡一区二区 | 2018亚洲男人天堂 | 国产毛片自拍 |