Django模板标签具有相同的名称

例如,我有2个模板标签

app1  
    templatetags  
        app1_tags.py  
            def custom_tag()  
app2  
    templatetags  
        app2_tags.py  
            def custom_tag()  

如果我在模板中加载两个templatetags

{% load app1_tags %}
{% load app2_tags %}

我有两个名为custom_tag的标签.如何在我的模板中使用它们?我必须重命名吗?

最佳答案 我知道这不是最好的解决方案,但根据您的需求,它可能会有所帮助.

这仅适用于您制作应用程序或覆盖模板标记的情况

此选项为每个标记指定不同的名称:

app1_tags.py

@register.filter(name='custom1')
def custom_tag():
    # Your code

app2_tags.py

@register.filter(name='custom2')
def custom_tag():
    # Your code

通常如果您在不告知名称的情况下注册标记,Django将使用该函数作为过滤器名称,但是如果您在注册过滤器时传递了arg’name’,Django将使用它作为模板标签名称.

Django: Custom Template tag

如果在注册标记时为它们指定了不同的名称,那么这将是用于加载标记的名称

{% load custom1 %}
{% load custom2 %}

您只需要自定义其中一个的名称,就可以使用另一个的原始名称

导入不同名称下的标签

正如@Igor建议的那样,另一个选择是导入你想要使用的模板和另一个名字,让我们说像别名,这样你就可以避免不同标签/过滤器之间的冲突.

假设您要将标签导入项目,您应该添加标签,如:

your_app / template_tags / my_custom_tag

要使用其他名称从app2上的app2导入代码,只需将其添加到文件my_custom_tag:

from app2.template_tags.app2_tags import custom_tag

register.filter(name="new_custom_tag_name", custom_tag)

之后,您已使用新名称new_custom_tag_name将标记custom_tag导入项目

点赞