gpt4 book ai didi

python - 在 Django 中捕获 TemplateDoesNotExist

转载 作者:太空狗 更新时间:2023-10-30 01:23:19 24 4
gpt4 key购买 nike

我正在尝试使用 SO answer 中描述的模板标签:https://stackoverflow.com/a/6217194/493211在使用 Django 1.4.3(使用 Python 2.7.2)的项目中。

我是这样改编的:

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(..)(从 statement 内部) ),因此不是我的愚蠢 API。因此,这在渲染过程中在我面前爆炸了。我将堆栈跟踪上传到 pastebin

这是 Django 想要的行为吗?

我最终不再做愚蠢的事情了。但我的问题仍然存在。

最佳答案

自定义标签呢?这不提供 include 的全部功能,但似乎满足问题中的需求。:

@register.simple_tag(takes_context=True)
def include_fallback(context, *template_choices):
t = django.template.loader.select_template(template_choices)
return t.render(context)

然后在你的模板中:

{% include_fallback "profile/header.html" "common/header.html" %}

关于python - 在 Django 中捕获 TemplateDoesNotExist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com