同名的Django模板标记
例如,我有两个TemplateTag同名的Django模板标记,django,templatetags,Django,Templatetags,例如,我有两个TemplateTag app1 templatetags app1_tags.py def custom_tag() app2 templatetags app2_tags.py def custom_tag() {% load app1_tags %} {% load app2_tags %} 如果我在模板中加载两个templatetags app
app1
templatetags
app1_tags.py
def custom_tag()
app2
templatetags
app2_tags.py
def custom_tag()
{% load app1_tags %}
{% load app2_tags %}
如果我在模板中加载两个templatetags
app1
templatetags
app1_tags.py
def custom_tag()
app2
templatetags
app2_tags.py
def custom_tag()
{% load app1_tags %}
{% load app2_tags %}
我有两个名为
custom_tag
的标签。如何在模板中使用它们?我必须重命名它们吗?我知道这不是最好的解决方案,但根据您的需要,它可能会有所帮助
此仅在应用程序由您制作或覆盖模板标记时有效
此选项用于为每个标记指定不同的名称:
app1_tags.py
app2_tags.py
通常,如果您注册标记而不告诉名称,Django将使用该函数作为筛选器名称,但是如果您在注册筛选器时传递arg'name',Django将使用该函数作为templatetag名称
如果在注册标记时为它们指定不同的名称,则将使用该名称加载标记
{% load custom1 %}
{% load custom2 %}
您只需要自定义其中一个的名称,就可以使用另一个的原始名称
以不同名称导入标记
正如@Igor所建议的,另一个选项是导入您想要使用另一个名称的模板,比如说像一个别名那样,这样可以避免使用相同名称的不同标记/过滤器之间的冲突
如果要将标记导入项目,则应添加标记,如下所示:
your_app/template_tags/my_custom_tag
要使用不同的名称从应用程序上的app2导入标记,只需将其添加到文件my_custom_标记中即可:
from app2.template_tags.app2_tags import custom_tag
register.filter(name="new_custom_tag_name", custom_tag)
在此之后,您将标签自定义标签导入到您的项目中,并使用新名称新建自定义标签我似乎找不到答案,我非常想知道这是否可行。这两个应用程序都是您编写的吗?是的,谢谢。此解决方案适用于创建自定义标记。但如果app1和app2不是我的应用程序,这并不能解决问题。如果它支持名称空间那就太好了。我尝试了名称空间,或者在模板中重命名,但我无法让它工作。此解决方案仅在模板标记由您制作或您在应用程序中覆盖它们时有效。如果两个应用程序都不是您的应用程序,则您可以在应用程序3
app3/template\u tags/my\u tag
中创建新的模板库。在那里,您可以从app2导入标记并用新名称注册它<代码>从app2.template_tags.app2_tags导入自定义_标签;register.filter(name=“my_custom_tag”,custom_tag)Nice,它与我的答案类似,但我认为对这个问题更好,如果您不介意的话,我会将此信息添加到我的答案中