自定義過濾器就是有一個或兩個參數的Python函數:
- (輸入)變量的值
- 參數的值, 可以是默認值或者完全留空
例如,在過濾器 {{ var|foo:"bar" }} 中 ,過濾器 foo 會被傳入變量 var 和默認參數 bar。
過濾器函數應該總有返回值。 而且不能觸發異常,它們都應該靜靜地失敗。 如果出現錯誤,應該返回一個原始輸入或者空字符串,這會更有意義。
這里是一些定義過濾器的例子:
def cut(value, arg):
"Removes all values of arg from the given string"
return value.replace(arg, '')
下面是一個可以用來去掉變量值空格的過濾器例子:
{{ somevariable|cut:" " }}
大多數過濾器并不需要參數。 下面的例子把參數從你的函數中拿掉了:
def lower(value): # Only one argument.
"Converts a string into all lowercase"
return value.lower()
當你定義完過濾器后,你需要用 Library 實例來注冊它,這樣就能通過Django的模板語言來使用了:
register.filter('cut', cut)
register.filter('lower', lower)
Library.filter() 方法需要兩個參數:
如果你使用的是Python 2.4或者更新的版本,你可以使用裝飾器register.filter():
@register.filter(name='cut')
def cut(value, arg):
return value.replace(arg, '')
@register.filter
def lower(value):
return value.lower()
如果你想第二個例子那樣不使用 name 參數,那么Django會把函數名當作過濾器的名字。
下面是一個完整的模板庫的例子,它包含一個 cut 過濾器:
from django import template
register = template.Library()
@register.filter(name='cut')
def cut(value, arg):
return value.replace(arg, '')
您可能感興趣的文章:- 深入理解Django的自定義過濾器
- 詳解django中自定義標簽和過濾器
- 詳解Django中的過濾器
- Go語言實現布谷鳥過濾器的方法