我正在尝试在使用 Django 1.4.3(使用 Python 2.7.2)的项目中使用 SO 答案中描述的模板标签: https ://stackoverflow.com/a/6217194/493211。
我是这样改编的:
from django import template
register = template.Library()
@register.filter
def template_exists(template_name):
try:
template.loader.get_template(template_name)
return True
except template.TemplateDoesNotExist:
return False
这样我就可以在另一个模板中像这样使用它:
{% if 'profile/header.html'|template_exists %}
{% include 'profile/header.html' %}
{% else %}
{% include 'common/header.html' %}
{% endif %}
这样,我可以避免使用诸如更改 INSTALLED_APPS 中的应用程序顺序之类的解决方案。
但是,它不起作用。如果模板不存在,则在堆栈/控制台中引发异常,但不会传播到get_template(..)
(从该语句内部),因此不会传播到我愚蠢的API。因此,在渲染过程中,这在我的脸上爆炸了。我将堆栈跟踪上传到pastebin
这是 Django 想要的行为吗?
我最终停止做愚蠢的事情。但我的问题仍然存在。