簡單的標籤
定義自定義模板標記的最簡單方法是使用 simple_tag
。這些設定非常簡單。函式名稱將是標記名稱(儘管你可以覆蓋它),引數將是標記(單詞由空格分隔,除了引號之間的空格除外)。它甚至支援關鍵字引數。
這是一個無用的標籤,將說明我們的例子:
{% useless 3 foo 'hello world' foo=True bar=baz.hello|capfirst %}
讓 foo
和 baz
成為上下文變數,如下所示:
{'foo': "HELLO", 'baz': {'hello': "world"}}
假設我們希望這個無用的標記像這樣渲染:
HELLO;hello world;bar:World;foo:True<br/>
HELLO;hello world;bar:World;foo:True<br/>
HELLO;hello world;bar:World;foo:True<br/>
一種引數連線重複 3 次(3 是第一個引數)。
以下是標記實現的外觀:
from django.utils.html import format_html_join
@register.simple_tag
def useless(repeat, *args, **kwargs):
output = ';'.join(args + ['{}:{}'.format(*item) for item in kwargs.items()])
outputs = [output] * repeat
return format_html_join('\n', '{}<br/>', ((e,) for e in outputs))
format_html_join
允許將 <br/>
標記為安全的 HTML,但不是 outputs
的內容。