2011-04-16 29 views

回答

18

我不认为你能够做到这一点没有捕捉到这个异常,但你可以在你的try语句中使用django.template.loader.get_template(template_name)而不是乐观的render_to_response调用。 (如果你是不是已经这样做了......)

29

如果你的意图是,如果它存在,并且默认为第二个模板使用模板,你最好使用select_template:

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

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

+0

您也可以将模板列表传递给django.template.response.TemplateResponse – baxeico 2014-10-06 14:07:33

6

这是我实施的,这是法比奥的答案。我不知道这是否是实现这一目标的最佳方式,但它对我的预期效果。

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

相关问题