检查Django中是否存在模板的最有效方法是什么?我正在考虑捕捉TemplateDoesNotExist
异常,但也许有更多的Djangoistic方法来实现它?如何检查Django中是否存在模板?
感谢您的帮助!
检查Django中是否存在模板的最有效方法是什么?我正在考虑捕捉TemplateDoesNotExist
异常,但也许有更多的Djangoistic方法来实现它?如何检查Django中是否存在模板?
感谢您的帮助!
我不认为你能够做到这一点没有捕捉到这个异常,但你可以在你的try语句中使用django.template.loader.get_template(template_name)
而不是乐观的render_to_response调用。 (如果你是不是已经这样做了......)
如果你的意图是,如果它存在,并且默认为第二个模板使用模板,你最好使用select_template:
django.template.loader.select_template(['custom_template','default_template'])
这将加载列表中的第一个现有模板。
这是我实施的,这是法比奥的答案。我不知道这是否是实现这一目标的最佳方式,但它对我的预期效果。
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.template.response.TemplateResponse – baxeico 2014-10-06 14:07:33