在Django框架中自定義模板過濾器的方法
自定義過濾器就是有一個(gè)或兩個(gè)參數(shù)的Python函數(shù):
- (輸入)變量的值
- 參數(shù)的值, 可以是默認(rèn)值或者完全留空
例如,在過濾器 {{ var|foo:"bar" }} 中 ,過濾器 foo 會(huì)被傳入變量 var 和默認(rèn)參數(shù) bar。
過濾器函數(shù)應(yīng)該總有返回值。 而且不能觸發(fā)異常,它們都應(yīng)該靜靜地失敗。 如果出現(xiàn)錯(cuò)誤,應(yīng)該返回一個(gè)原始輸入或者空字符串,這會(huì)更有意義。
這里是一些定義過濾器的例子:
def cut(value, arg): "Removes all values of arg from the given string" return value.replace(arg, '')
下面是一個(gè)可以用來去掉變量值空格的過濾器例子:
{{ somevariable|cut:" " }}
大多數(shù)過濾器并不需要參數(shù)。 下面的例子把參數(shù)從你的函數(shù)中拿掉了:
def lower(value): # Only one argument. "Converts a string into all lowercase" return value.lower()
當(dāng)你定義完過濾器后,你需要用 Library 實(shí)例來注冊(cè)它,這樣就能通過Django的模板語言來使用了:
register.filter('cut', cut)
register.filter('lower', lower)
Library.filter() 方法需要兩個(gè)參數(shù):
- 過濾器的名稱(一個(gè)字串)
- 過濾器函數(shù)本身
如果你使用的是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()
如果你想第二個(gè)例子那樣不使用 name 參數(shù),那么Django會(huì)把函數(shù)名當(dāng)作過濾器的名字。
下面是一個(gè)完整的模板庫的例子,它包含一個(gè) cut 過濾器:
from django import template register = template.Library() @register.filter(name='cut') def cut(value, arg): return value.replace(arg, '')
相關(guān)文章
Perl實(shí)現(xiàn)的Linux下socket代理服務(wù)器
這篇文章主要介紹了Perl實(shí)現(xiàn)的Linux下socket代理服務(wù)器,比較簡潔的一個(gè)版本,需要的朋友可以參考下2014-08-08
perl 指定長度并生成一個(gè)隨機(jī)的DNA序列的腳本代碼
perl 指定長度并生成一個(gè)隨機(jī)的DNA序列的代碼,有需要的朋友可以參考下2013-03-03
perl命令行參數(shù)內(nèi)建數(shù)組@ARGV淺析
這篇文章主要介紹了perl命令行參數(shù)內(nèi)建數(shù)組@ARGV淺析,本文重點(diǎn)在于講解@ARGV的用法,并通過實(shí)例來說明,需要的朋友可以參考下2014-06-06

