2012-08-02 10 views
5

पर एक अलग टेम्पलेट कैसे लौटा सकता हूं, मुझे Django के अनुरोध को मिलते हैं। आईएसएक्सएक्स जेएस के माध्यम से प्रगतिशील वृद्धि जोड़ने के लिए एक बहुत ही उपयोगी तरीका है और अभी भी मेरे विचारों में DRY रखता है।Django क्लास-आधारित विचारों का उपयोग करते हुए, मैं request.is_ajax

हालांकि, मैं क्लास-आधारित विचारों का उपयोग करना चाहता हूं और request.is_ajax पर एक अलग टेम्पलेट के साथ प्रस्तुत करना चाहता हूं।

यह मुझे स्पष्ट नहीं है कि मैं अपने डिफ़ॉल्ट "template_name" को ओवरराइड कैसे कर सकता हूं और टेम्पलेट को क्लास-आधारित दृश्यों में सशर्त लोड कर सकता हूं।

मैं यह कैसे कर सकता हूं?

+0

शायद आपको अपने क्लास आधारित दृश्य के लिए "एपीआई" यूआरएल जोड़ना चाहिए जहां AJAX कॉल केवल क्लासिक आधारित दृश्य के साथ AJAX कॉल के लिए जाता है। – Jingo

+0

निश्चित रूप से मैं ऐसा कर सकता हूं, लेकिन यही वह है जिसे मैं टालना चाहता हूं: यह मुझे प्रगतिशील वृद्धि नहीं देता है, और यह मुझे और अधिक दृश्य और यूआरएल कोड देता है। – pwalsh

उत्तर

4

यह करने के लिए उचित तरीके से TemplateResponseMixin द्वारा प्रदान तरीकों ओवरराइड करने के लिए है।

यदि आपको केवल अजाक्स अनुरोधों के लिए एक अलग टेम्पलेट प्रदान करने की आवश्यकता है, तो get_template_names ओवरराइड करें। यदि आप पूरी तरह से एक अलग प्रतिक्रिया प्रदान करना चाहते हैं, तो application/json प्रतिक्रिया कहें, फिर अजाक्स अनुरोधों के लिए HttpResponse का उत्पादन करने के लिए render_to_response ओवरराइड करें।

+0

धन्यवाद, यह मेरे प्रश्न का उत्तर देता है, और मुझे केवल टेम्पलेट को नहीं बल्कि प्रतिक्रिया ऑब्जेक्ट को ओवरराइड करने के लिए सही दिशा में इंगित करता है। – pwalsh

9

अवहेलना get_template_names:

def get_template_names(self): 
    if self.request.is_ajax(): 
     return ['ajax_template.html'] 
    else: 
     return ['standard_template.html'] 
+0

अच्छा जवाब, धन्यवाद। – pwalsh

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