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

mm5n2pyu  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(151)
{% 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在那里工作正常。但是我在文件中添加了这个模板标签,这个模板标签就不起作用了。

igetnqfo

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

93ze6v8z

93ze6v8z2#

"no attribute 'must_be_first'"错误的另一个可能原因是您忘记在类中继承django.template.Node。(因为这是这个短语的唯一谷歌结果,我想我应该在这里添加这个,为下一个人保存几分钟。

b4lqfgs4

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"

相关问题