Каков наиболее эффективный способ проверить, существует ли шаблон в Django? Я думал о том, чтобы поймать исключение TemplateDoesNotExist
, но, может быть, есть более чем Djangoistic способ сделать это?
Спасибо за вашу помощь!
Каков наиболее эффективный способ проверить, существует ли шаблон в Django? Я думал о том, чтобы поймать исключение TemplateDoesNotExist
, но, может быть, есть более чем Djangoistic способ сделать это?
Спасибо за вашу помощь!
Я не думаю, что вы сможете это сделать, не поймав это исключение, но вы можете использовать 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