简单的标签

定义自定义模板标记的最简单方法是使用 simple_tag。这些设置非常简单。函数名称将是标记名称(尽管你可以覆盖它),参数将是标记(单词由空格分隔,除了引号之间的空格除外)。它甚至支持关键字参数。

这是一个无用的标签,将说明我们的例子:

{% useless 3 foo 'hello world' foo=True bar=baz.hello|capfirst %}

foobaz 成为上下文变量,如下所示:

{'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 的内容。