定製過濾器
過濾器允許你將函式應用於變數。此函式可能需要 0 或 1 個引數。這是語法:
{{ variable|filter_name }}
{{ variable|filter_name:argument }}
過濾器可以連結,因此這是完全有效的:
{{ variable|filter_name:argument|another_filter }}
如果轉換為 python,上面的行會給出這樣的結果:
print(another_filter(filter_name(variable, argument)))
在這個例子中,我們將編寫一個適用於 Model(例項或類)或 QuerySet 的自定義過濾器 verbose_name
。如果引數設定為 True
,它將返回模型的詳細名稱或其詳細名稱複數。
@register.filter
def verbose_name(model, plural=False):
"""Return the verbose name of a model.
`model` can be either:
- a Model class
- a Model instance
- a QuerySet
- any object refering to a model through a `model` attribute.
Usage:
- Get the verbose name of an object
{{ object|verbose_name }}
- Get the plural verbose name of an object from a QuerySet
{{ objects_list|verbose_name:True }}
"""
if not hasattr(model, '_meta'):
# handle the case of a QuerySet (among others)
model = model.model
opts = model._meta
if plural:
return opts.verbose_name_plural
else:
return opts.verbose_name