99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Django中通過filter和simple_tag為前端實(shí)現(xiàn)自定義函數(shù)

發(fā)布時(shí)間:2017-06-26 10:47  回復(fù):0  查看:2081   最后回復(fù):2017-06-26 10:47  
本文和大家分享的主要是Django中通過filter和simple_tag為前端實(shí)現(xiàn)自定義函數(shù)相關(guān)內(nèi)容,一起來看看吧,希望對大家 學(xué)習(xí)django 有所幫助。
  Django的模板引擎提供了一般性的功能函數(shù),通過前端可以實(shí)現(xiàn)多數(shù)的代碼邏輯功能,這里稱之為一般性,是因?yàn)樗鼉H支持大多數(shù)常見情況下的函數(shù)功能,例如if判斷,ifequal對比返回值等,但是稍微復(fù)雜一些的函數(shù)功能并不支持,例如通過模板來判斷一個(gè)返回值是否是合法的數(shù)字類型,此時(shí)如果又不希望通過后臺(tái)視圖代碼來實(shí)現(xiàn)的話,我們就可以自定義一些前端函數(shù)功能。
  Django為我們提供了兩種方式,分別是filter和simple_tag,下面對比兩種方式,分別實(shí)現(xiàn)判斷返回值的功能函數(shù)。
  準(zhǔn)備工作
  1、應(yīng)用程序必須要注冊到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)容如下:(templatetags目錄與views.py等文件同級(jí))
  from django import templatefrom django.template.defaultfilters import stringfilter
  register = template.Library()
  @register.filterdef 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 templatefrom django.template.defaultfilters import stringfilter
  register = template.Library()
  @register.simple # 這里修改為simple_tagdef 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中可以通過下面的方式實(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è)字符串傳遞給后端,后端通過split方式同樣能獲取多個(gè)參數(shù)。
  對比總結(jié)
  通過simple_tag和filter可以完成模板引擎無法完成的某些事情,filter將我們指定的函數(shù)變成了返回值可執(zhí)行的方法,simple_tag將函數(shù)功能變?yōu)闃?biāo)簽功能,例如if、ifequal等,同樣調(diào)用方式也不同,對比如下:
  {{ 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下面,否則無法生效。但是也可以使用simple_tag ,通過下面的賦值操作,就可以在if ,for等標(biāo)簽中使用了
 ?。ㄟ@里archives 是simple_tag修飾的方法返回的變量)
{% archives as date_list %}{% for date in date_list %}

來源:博客園
您還未登錄,請先登錄

熱門帖子

最新帖子

?