Как проверить, существует ли шаблон в Django? - PullRequest
15 голосов
/ 17 апреля 2011

Какой самый эффективный способ проверить, существует ли шаблон в Django?Я думал о том, чтобы поймать исключение TemplateDoesNotExist, но, может быть, есть более Djangoistic способ сделать это?

Спасибо за вашу помощь!

Ответы [ 3 ]

30 голосов
/ 04 июня 2012

Если вы намерены использовать шаблон, если он существует и по умолчанию используется второй шаблон, вам лучше использовать select_template:

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

Это загрузит первый существующий шаблон в списке.

20 голосов
/ 17 апреля 2011

Я не думаю, что вы сможете сделать это без перехвата этого исключения, но вы могли бы использовать django.template.loader.get_template(template_name) в своем выражении try вместо вызова оптимиста render_to_response.(Если вы этого еще не сделали ...)

7 голосов
/ 07 декабря 2014

Вот то, что я реализовал, что выходит из ответа Фабио.Я не знаю, является ли это лучшим способом сделать это, но он работает, как и ожидалось.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...