简单的标签
定义自定义模板标记的最简单方法是使用 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
的内容。