Django-templates:在应用之间共享自定义包含标记

时间:2015-01-07 16:25:19

标签: django django-templates

关于查找模板存在很多问题,但我找不到与自定义标签相关的任何内容。

我有以下示意图项目结构: / |- app1 | |- templatetags | | |- my_helpers.py | |- templates | |- my_helpers | |- my_tag.html |- app2 |- templates |- include | |- inclusion.html |- base.html

my_helpers.py中定义了一个简单的包含标记:

from django import template
register = template.Library()    
@register.inclusion_tag('my_helpers/my_tag.html')
def my_tag(...):
    ...

app2/templates/base.html看起来像这样:

{% load my_helpers %}
... some markup ...
{% my_tag %}
{% include 'include/inclusion.html' %}

这里my_tag工作正常。但是当我试图在'include / inclusion.html'中使用它时(我在那里添加了{% load my_helpers %}标签),它失败了:

django.template.base.TemplateDoesNotExist
TemplateDoesNotExist: my_helpers/my_tag.html

据我了解,它仅在当前应用中查找模板。但为什么它仅适用于include d模板?是否有可能使其有效?

1 个答案:

答案 0 :(得分:0)

要实现这一点,您可以利用Django模板加载器的功能。 您可以像下面那样创建项目结构 - |- templates | |- common_templates | |- my_tag.html |- app1 | |- templatetags | | |- my_helpers.py | |- templates | |- my_helpers | |- app2 |- templates |- include | |- inclusion.html |- base.html

你的my_helpers.py就像

from django import template
register = template.Library()    
@register.inclusion_tag('common_templates/my_tag.html')
def my_tag(...):
    ...