为什么Django中的模板标签不起作用?

时间:2011-02-10 09:26:53

标签: python html django templates

{% gen_aws "hello" %}

在我的档案中,我这样做:

#I want to add "goodbye" to every word passed to this tag.
@register.tag(name="gen_aws")
def gen_aws(s):
    return s + "goodbye"

.py文件很好......我包括一切都很好。我有其他模板“过滤器”在那里工作正常。但后来我在那个文件中添加了这个,这个模板标签不起作用。

2 个答案:

答案 0 :(得分:9)

您对“不起作用”的描述不是很准确(确切地说它不存在)。但我猜你得到一个错误,因为找不到标签。

documentation明确指出您需要在应用中使用“templatetags”模块,例如“mytags”等子模块。然后,您必须在要使用它们的每个模板中包含这些标记。您可以使用{% load mytags %}

执行此操作

“mytags”模块随后包含您的“gen_aws”标签。

编辑:错误“gen_aws()只需要1个参数(给定2个)”,因为普通标签可以以非常自定义的方式解析它们的参数。因此,他们得到参数“parser”和“token”。在你的情况下,所谓的simple tag就足够了 - 然后Django自动为你解析参数并将它们作为Python值传递。因此,只需将@register.tag替换为@register.simple_tag

答案 1 :(得分:5)

"no attribute 'must_be_first'"错误的另一个可能原因是您忘记了从班级django.template.Node继承。 (因为这几乎就是这句话的唯一结果,我想我会在这里添加这个,以便为下一个人节省几分钟。)