Django 學習第五天——自定義過濾器及標簽
代碼布局:(自定義的代碼放在哪?)
1、創建某個 app 特有的:
在 app 目錄下,創建 templatetags python包(文件夾);
再到 templatetags 文件夾下創建python模塊(文件)
註意:templatetags 這個名字固定的,裏面的模塊名是自定義的
2、創建復用(公用)的:
創建一個新的app,將他們定義在新的app中,在主目錄的setting.py文件裏的 INSTALL_APPS 註冊,然後就可以應用
一、自定義模板過濾器
創建:
模板過濾器就是一個函數:
一般有一個或或兩個參數
第一個參數,一般是傳遞進來的模板變量;
第二個參數,普通的參數,也可以十默認,也可以不要;
定義就是寫一個函數
註冊:
1、通過 django.template.Library 它的實例(一定要是:register)的 filter 方法
filter 有兩個參數:
1)、name:過濾器的名稱,是個字符串,可以不寫,默認使用方法名作為過濾器的名稱;
2)、filter_func: 定義的過濾器的函數(函數對象);註意不要把函數名寫成字符串
register.filter(‘別名‘,自定義的函數名)
2、通過裝飾器:
@register.filter #這裏可以傳入 @register.filter(name=‘newname‘) 取別名
使用:
需要使用{% load %}標簽將我們的自定義模塊加載進來
{% load %} 聲明將會載入給定模塊名中的標簽/過濾器
二、自定義模板標簽:
自定義簡單標簽:
創建:
就是一個普通的python函數
註冊:
1、通過 django.template.Library 它的實例(一定要是:register)的 simple_tag 方法
simple_tag 有兩個參數:
1)、name:過濾器的名稱,是個字符串,可以不寫,默認使用方法名作為過濾器的名稱;
2)、filter_func: 定義的過濾器的函數,(函數對象)
register.simple_tag(name=‘別名‘,自定義的函數名)
2、通過裝飾器:
@register.simple_tag #這裏也可以傳入 @register.simple_tag(name=‘newname‘) 取別名
使用:
需要使用{% load %}標簽將我們的自定義模塊加載進來
{% load %} 聲明將會載入給定模塊名中的標簽/過濾器
引用上下文變量:(views 中render傳遞到模板中的那個 context)
只需要在 simple_tag 中設置 take_context=True
自定義標簽函數的第一個參數一定是 context
包含標簽:(inclusion tags)
通過渲染另一個模板來展示數據
定義:
定義一個函數,接收調用時傳遞的模板變量
定義一個模板,供這個函數使用
註冊:
1、通過 django.template.Library 它的實例(一定要是:register)的 inclusion_tag 方法
inclusion_tag 有兩個參數:
1)、name:過濾器的名稱,是個字符串,可以不寫,默認使用方法名作為過濾器的名稱;
2)、filter_func: 定義的過濾器的函數,(函數對象)
register.inclusion_tag(自定義的函數名) #傳入定義的那個供函數使用的模板
2、通過裝飾器:
@register.inclusion_tag(‘自定義的那個模板文件‘)
使用:
需要使用{% load %}標簽將我們的自定義模塊加載進來
{% load %} 聲明將會載入給定模塊名中的標簽/過濾器
引用上下文變量:(views 中render傳遞到模板中的那個 context)
只需要在 inclusion_tag 中設置 take_context=True
自定義標簽函數的第一個參數一定是 context
Django 學習第五天——自定義過濾器及標簽