2011-04-16 17 views
14

Django में कोई टेम्पलेट मौजूद है या नहीं, यह जांचने का सबसे प्रभावी तरीका क्या है? मैं TemplateDoesNotExist अपवाद को पकड़ने की सोच रहा था, लेकिन शायद ऐसा करने के लिए एक और Djangoistic तरीका है?Django में कोई टेम्पलेट मौजूद है या नहीं?

आपकी मदद के लिए धन्यवाद!

उत्तर

18

मुझे नहीं लगता कि आप इस अपवाद को पकड़ने के बिना ऐसा करने में सक्षम होंगे, लेकिन आप render_to_response की आशावादी कॉल के बजाय अपने प्रयास कथन में django.template.loader.get_template(template_name) का उपयोग कर सकते हैं। (आप पहले से ही यह कर नहीं कर रहे हैं ...)

29

आपका इरादा यदि वह मौजूद है और एक दूसरे टेम्पलेट के लिए डिफ़ॉल्ट एक टेम्पलेट का उपयोग करने के लिए है, तो आप बेहतर select_template का प्रयोग करेंगे:

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

यह लोड होगा सूची में पहला मौजूदा टेम्पलेट।

+0

आप टेम्पलेट्स की एक सूची को django.template.response.emplateResponse पर भी पास कर सकते हैं – baxeico

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

संबंधित मुद्दे