如何检查Django中是不是存在模板?

Posted

技术标签:

【中文标题】如何检查Django中是不是存在模板?【英文标题】:How to check if a template exists in Django?如何检查Django中是否存在模板? 【发布时间】:2011-04-16 22:58:55 【问题描述】:

检查 Django 中是否存在模板最有效的方法是什么?我正在考虑捕捉TemplateDoesNotExist 异常,但也许有更 Djangoistic 的方式来做到这一点?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

如果您打算使用模板(如果存在)并默认使用第二个模板,则最好使用 select_template:

django.template.loader.select_template(['custom_template','default_template'])

这将加载列表中的第一个现有模板。

【讨论】:

您还可以将模板列表传递给 django.template.response.TemplateResponse【参考方案2】:

我认为如果不捕获此异常,您将无法执行此操作,但您可以在 try 语句中使用 django.template.loader.get_template(template_name),而不是乐观地调用 render_to_response。 (如果你还没有这样做……)

【讨论】:

【参考方案3】:

这是我实施的,与 Fabio 的回答不符。我不知道这是否是最好的方法,但它对我来说可以正常工作。

from django.views.generic import TemplateView
from django.http import Http404
from django.template.loader import get_template
from django.template import TemplateDoesNotExist
from absolute.menu.models import Menu # specific to my app

class BasicPublicView(TemplateView):
    model = Menu #specific to my app

    def dispatch(self, request, *args, **kwargs):
        try:
            self.template_name = request.path[1:] + '.html'
            get_template(self.template_name)
            return super(BasicPublicView, self).dispatch(request, *args, **kwargs)
        except TemplateDoesNotExist:
            raise Http404

如果模板存在,这允许我从模板目录中动态拉取模板。例如,http://example.com/products/keyboards 将尝试获取模板 /templates/products/keyboards.html

【讨论】:

以上是关于如何检查Django中是不是存在模板?的主要内容,如果未能解决你的问题,请参考以下文章

检查图像是不是存在于 Django 模板中

检查列表中是不是存在数字,应用引擎模板

如何使用 Velocity 模板语言检查数组中是不是存在值

Jade - 模板引擎:如何检查变量是不是存在

检查元素是不是在模型中 - Django 模板

Django - 检查列表是不是包含模板中的某些内容