自定義模板標籤
要在模組內自定義標籤,首先,這個模組必須包含乙個名為register的變數,它是template.library的乙個例項
from django import template
register = template.library(
)
自定義過濾器就是乙個帶有乙個或兩個引數的python函式
第乙個引數是要過濾的對, 第二個引數是自定義的引數.
def
cut(value, arg)
:return value.replace(arg,
'')
使用過濾器
}
可以把register.filter()
用作裝飾器
@register.
filter
(name=
'cut'
)def
cut(value, arg)
:return value.replace(arg,
'')
django.template.defaultfilters.stringfilter()
編寫只接收乙個字串作為第乙個引數的模板過濾器, 可以使用stringfilter的裝飾器.
如果自定義過濾器, 用於處理datetime物件, 註冊個過濾器時通常將expects_localtime標誌置為true.
@register.
filter
(expects_localtime=
true
)def
judge
(value)
:try
:return
9<= value.hour <
17except attributeerror:
return
''
設定該標誌後,如果過濾器接收的第乙個引數是乙個時區敏感的 datetime,django會在將其傳遞給過濾器前將其轉換為當前時區的時間
我們都知道, 由於html語法的特殊性, 有一些字串是不太安全的, 所以, 在前端頁面, 為了防止xss攻擊, 通常會考慮字串轉義的問題.
可以為過濾器指定is_safe=true引數, 該標誌告訴django, 若乙個"安全" 字串傳給你的過濾器, 結果仍會是安全的。若傳入了不安全的字串,django 會在需要時自動轉義.
@register.
filter
(is_safe=
true
)def
myfilter
(value)
:return value
如果確認字串是安全的, 可以使用make_safe方法標記它, 這樣django就不會轉義它.
******_tag將乙個python函式註冊為乙個簡單的模板標籤
******_tag是django.template.library的乙個方法
示例 : 編寫乙個返回當前時間的模板標籤
import datetime
from django import template
register = template.library(
)@register.******_tag
defcurrent_time
(format_string)
:return datetime.datetime.now(
).strftime(format_string)
******_tag函式可以接受任意數量的位置引數和關鍵字引數。 像這樣:
@register.******_tag
def my_tag
(a, b,
*args,
**kwargs)
: warning = kwargs[
'warning'
] profile = kwargs[
'profile'].
..return..
.
自定義inclusion標籤
輸出
first choice<
/li>
second choice<
/li>
third choice<
/li>
<
/ul>
具體的編寫方法
def
show_results
(poll)
: choices = poll.choice_set.
all(
)return
通過呼叫library物件的inclusion_tag()裝飾器方法建立並註冊inclusion標籤︰
@register.
inclusion_tag
('results.html'
)def show_results
(poll):.
..
django模板,自定義標籤和filter
注 這悲催的縮排,真是對不起觀眾了,有時間過來修改。自定義標籤大致分為三類 1 非封閉標籤如 2 封閉標籤如 3 inclusion標籤 比如 定義乙個標籤需要做兩方面工作 1 定義編譯函式 2 定義node。編譯函式的作用是將自定義node中的render所需要的引數計算出來,以備使用。比如將自定...
Django 自定義標籤
模版是乙個用django模版語言標記過的python字串。模版可以包含模版標籤和變數。模版標籤是在乙個模版裡起作用的標記。比如,乙個模版標籤可以產生控制結構的內容 if或者for 可以獲取資料庫內容或者訪問其它模版標籤。乙個標籤塊被包圍 變數標籤被 包圍 context是乙個傳遞給模版的key va...
Django 自定義標籤
新建乙個資料夾mydefined裡面在新建乙個templatetags在裡面新建mytags.py mytags.py 劉文豪 大帥哥 from django import template register template.library 建立模板物件 定義模板節點 class reversal...