{% 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文件很好......我包括一切都很好。我有其他模板“过滤器”在那里工作正常。但后来我在那个文件中添加了这个,这个模板标签不起作用。
答案 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
继承。 (因为这几乎就是这句话的唯一结果,我想我会在这里添加这个,以便为下一个人节省几分钟。)