{% 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文件很好...我包含的一切都很好。我有其他模板filters在那里工作正常。但是我在文件中添加了这个模板标签,这个模板标签就不起作用了。
.py
filters
igetnqfo1#
你对“不起作用”的描述不是很准确(确切地说,它不存在)。但我猜你得到一个错误,因为标签没有找到。documentation明确指出,您需要在应用程序中使用“templatetags”模块,例如“mytags”子模块。然后,您必须在要使用的每个模板中包含这些标记。你可以用{% load mytags %}来实现。然后“mytags”模块包含“gen_aws”标记。
{% load mytags %}
**编辑:**错误“gen_aws()takes exactly 1 argument(2 given)”发生,因为普通标签可以以非常定制的方式解析其参数。因此,它们得到参数“parser”和“token”。在你的例子中,一个所谓的简单标签就足够了-- Django会自动为你解析参数,并将它们作为Python值传递。因此,只需将@register.tag替换为@register.simple_tag。
@register.tag
@register.simple_tag
93ze6v8z2#
"no attribute 'must_be_first'"错误的另一个可能原因是您忘记在类中继承django.template.Node。(因为这是这个短语的唯一谷歌结果,我想我应该在这里添加这个,为下一个人保存几分钟。
"no attribute 'must_be_first'"
django.template.Node
b4lqfgs43#
你需要使用@register.simple_tag,如下图所示,而不是@register.tag,它的函数无法获取值,但可以从模板标签中获取令牌,你可以看到我的答案解释了更多关于@register.simple_tag和@register.tag的信息:
# @register.tag(name="gen_aws") @register.simple_tag(name="gen_aws") def gen_aws(s): return s + "goodbye"
3条答案
按热度按时间igetnqfo1#
你对“不起作用”的描述不是很准确(确切地说,它不存在)。但我猜你得到一个错误,因为标签没有找到。
documentation明确指出,您需要在应用程序中使用“templatetags”模块,例如“mytags”子模块。然后,您必须在要使用的每个模板中包含这些标记。你可以用
{% load mytags %}
来实现。然后“mytags”模块包含“gen_aws”标记。
**编辑:**错误“gen_aws()takes exactly 1 argument(2 given)”发生,因为普通标签可以以非常定制的方式解析其参数。因此,它们得到参数“parser”和“token”。在你的例子中,一个所谓的简单标签就足够了-- Django会自动为你解析参数,并将它们作为Python值传递。因此,只需将
@register.tag
替换为@register.simple_tag
。93ze6v8z2#
"no attribute 'must_be_first'"
错误的另一个可能原因是您忘记在类中继承django.template.Node
。(因为这是这个短语的唯一谷歌结果,我想我应该在这里添加这个,为下一个人保存几分钟。b4lqfgs43#
你需要使用@register.simple_tag,如下图所示,而不是@register.tag,它的函数无法获取值,但可以从模板标签中获取令牌,你可以看到我的答案解释了更多关于
@register.simple_tag
和@register.tag
的信息: