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

时间:2015-05-14 05:02:15

标签: django templatetags

例如,我有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的标签。如何在我的模板中使用它们?我必须重命名吗?

1 个答案:

答案 0 :(得分:2)

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

如果应用程序是由您制作的,或者您覆盖模板标记

仅适用

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

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'名称'当您注册过滤器时,Django将使用它作为模板标签名称。

Django: Custom Template tag

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

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

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

以不同名称

导入代码

正如@Igor建议的那样,另一种选择是将您要使用的模板导入其他名称,让我们说像别名,这样可以避免不同标签/过滤器之间的冲突同名。

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

your_app/template_tags/my_custom_tag

要在应用上使用其他名称从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 导入项目