2011-04-16 90 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

相關問題