关于查找模板存在很多问题,但我找不到与自定义标签相关的任何内容。
我有以下示意图项目结构:
/
|- 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模板?是否有可能使其有效?
答案 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(...):
...