2个第三方应用程序,其模板标记文件具有相同的名称。如何加载它们?

时间:2017-01-16 17:32:56

标签: django django-templates templatetags

app1
 - templatetags
   - __init__.py
   - tags.py

app2
 - templatetags
   - __init__.py
   - tags.py

如果您在模板中执行{% load tags %},则会使用其中一个(在settings.py安装的应用中首先定义的那个)。如何加载特定于应用的模板标签?

有没有办法可以在不影响实际文件名的情况下更改一个应用程序的标签名称? (他们是第三方django应用程序)

this个类似的问题但在这种情况下模块名称不一样,所以情况不同。

还有this问题同样问题,但没有答案。

我尝试使用from指令但没有成功 {% load tags from app2 %} TemplateSyntaxError:' app2'不是有效的标签库..

2 个答案:

答案 0 :(得分:0)

您是否尝试过from指令:

{% load tags from app1 %}
{% load tags from app2 %}

答案 1 :(得分:0)

在这种情况下,其中有两个应用程序的模板标签具有相同的文件名,那么只有第一个遇到的应用程序的模板标记(,因为它们在{% load tags %}时可以访问设置中的installed_apps

所以,我终于使用了这种解决方法。

my_app
 - templatetags
   - __init__
   - app2_tags_copy.py 

我在其中一个应用中创建了一个新的代码文件( app2_tags_copy.py ),然后我导入了第二个应用的模板代码。该文件的所有内容都是一行导入代码:

from app2.templatetags.tags import * 

这样,只需在模板中执行{% load app2_tags_copy %},就可以使用app2_tags_copy.py名称来使用tags.py代码。即使更新app2,也会使用更新的标签代码。