2011-10-25 25 views
9

मेरे पास एक यूआरएल मैपिंग है जो इस तरह दिखता है:क्या मैं django TemplateView में किसी अन्य यूआरएल पर रीडायरेक्ट कर सकता हूं?

url(r'^(?P<lang>[a-z][a-z])/$', MyTemplateView.as_view()), 

केवल कुछ मान हैं जिन्हें मैं lang कैप्चर समूह के लिए स्वीकार करता हूं, जो है: (1) ro और (2) en। यदि उपयोगकर्ता http://server/app/fr/ टाइप करता है, तो मैं इसे डिफ़ॉल्ट http://server/app/en/ पर रीडायरेक्ट करना चाहता हूं।

मैं यह कैसे कर सकता हूं क्योंकि MyTemplateView में केवल एक विधि है जिसे एक शब्दकोश वापस करने की उम्मीद है?

def get_context_data(self, **kwargs): 
    return { 'foo': 'blah' } 

उत्तर

11

केवल get_context_data क्यों?

यदि आवश्यक हो तो रीडायरेक्ट करने के लिए बस अपना get हैंडलर सेट करें।

def get(self, request, lang): 
    if lang == 'fr': 
     return http.HttpResponseRedirect('../en') 

    return super(MyTemplateView, self).get(request, lang) 
23

मुझे पता है कि यह प्रश्न पुराना है, लेकिन मैंने अभी यह किया है। get_context_data में ऐसा करने का एक कारण आपको लगता है कि व्यवसाय तर्क के कारण है, लेकिन आपको इसे dispatch में रखना चाहिए।

def dispatch(self, request, *args, **kwargs): 
    if not request.user.is_authenticated(): 
     return redirect('home') 

    return super(MyTemplateView, self).dispatch(request, *args, **kwargs) 

अपने dispatch में अपने व्यापार तर्क रखें और आप सुनहरा होना चाहिए।

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