A-3-1-1 自定義過濾器標簽
過濾器自定義代碼布局(自定義的代碼,放的位置)
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 importLibrary 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
應用上下文變量(views中render傳遞到模板中的那個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 自定義過濾器標簽