1. 程式人生 > >A-3-1-1 自定義過濾器標簽

A-3-1-1 自定義過濾器標簽

views settings 文件夾 pre odi 參數 括號 代碼 etime

過濾器自定義代碼布局(自定義的代碼,放的位置)

  1.某個app特有的自定義代碼塊

    -app目錄下,創建一個 templatetags文件夾

     -templatetags創建python模塊加__init__文件

  2.共用的代碼塊

    -創建一個新的app,將他們定義在新的app中,在INSTALL_apps中註冊

然後就可以應用了

自定義過濾器(過濾器 html界面獲取chontext參數時對參數進行的操作{{lt|slice:‘::-1‘}} |調用 :傳參數 )

過濾器是什麽就是一個函數

函數(第一個參數,必須是傳遞進來的模板變量,第二個隨意)

定義

  非常簡單 就是寫一個函數(滿足條件的)

註冊一下

  第一個方法

    1 通過 django.temple.Library 的實例的filter方法

    2 filter有兩個參數:

      name過濾器的名字 str類型 不寫默認為函數名

      filter_func定義的過濾器的函數

register.filter(to_male)#函數不帶括號  #register是Library的實例化

   第二個方法用裝飾器的方法 在定義函數前加 @register.filter()

from django.template import
Library register = Library() #變量名隨意 @register.filter() #@register.filter(name=‘‘)可以通過關鍵字傳參數 def to_male(value,arg=zh): map= { zh:(,), en:(female,male), } return map[arg][value] # register.filter(to_male)

模板中使用

  load 通過python

的模塊名

如果出現了以下報錯

‘customer_filters‘ is not a registered tag library. Must be one of: admin_list admin_modify admin_static admin_urls cache i18n l10n log static staticfiles tz

settings文件中的INSTALLD_APPS內必須含有該app。需要確認settings文件中的INSTALLED_APPS變量中已經有了appname

自定義模板標簽(模板標簽是幹什麽用的?-html中可以用的函數 {%name 參數 %} 空格傳參數)

簡單標簽

   django.template.Library.simple_tag()

創建簡單標簽

  例子:輸出當前時間的標簽(跟過濾器很像)

註冊

  1調用函數

  2. 裝飾器

from datetime import  datetime
from django.template import Library

register =Library()
@register.simple_tag()              #註冊方法2
def curren_time(foramt_str=%Y-%m-%d %H:%S):
    return datetime.now().strftime(foramt_str)

# register.simple_tag(curren_time)    #註冊方法1

應用上下文變量(viewsrender傳遞到模板中的那個context

  只需要在simple_tag,設置參數take_contex=True

  並且標簽中的函數的第一個函數必須為context

包含標簽({% include ‘‘ %}通過渲染一個模板來展示數據)

  定義一個函數接收調用時傳遞的模板變量

    django.template.Library.inclusion_tag()

  定義一個模板

@register.inclusion_tag(video/show_list_as_ul.html)
def show_list_as_ul(value):
    return {ls:value}
    
#######################################################

video
/show_list_as_ul.html文件內容 <ul> {% for l in ls %} <li>{{ l }}</li> {% endfor %} </ul>

包涵標簽 :簡單標簽的結果通過html的渲染在輸出

調用時傳達位置參數和關鍵字參數都可以用空格區分

A-3-1-1 自定義過濾器標簽