2009-07-30 12 views
18

मैं सदस्य-आधारित वेब एप्लिकेशन लिख रहा हूं, और मुझे लॉगिन के बाद पृष्ठ को रीडायरेक्ट करने में सक्षम होना चाहिए। मैं अपने urls.py स्क्रिप्ट से नामित यूआरएल का उपयोग अपने view.py फ़ाइल में लॉगिन एप्लिकेशन के लिए करना चाहता हूं, लेकिन मैं अपने जीवन के लिए यह नहीं समझ सकता कि क्या करना है। क्या मैं यह है:Django और urls.py: मैं एक नामित यूआरएल के माध्यम से HttpResponseRedirect कैसे कर सकता हूं?

def login(request): 
if request.session.has_key('user'): 
    if request.session['user'] is not None: 
     return HttpResponseRedirect('/path/to/page.html') 

क्या मैं करना चाहते है की तरह कुछ:

def login(request): 
if request.session.has_key('user'): 
    if request.session['user'] is not None: 
     return HttpResponseRedirect url pageName 

जब मैं इस पर अमल मैं वाक्यविन्यास त्रुटियों मिलता है, किसी भी विचार?

उत्तर

34

आपको reverse() यूटिल्स फ़ंक्शन का उपयोग करने की आवश्यकता है।

from django.core.urlresolvers import reverse 

def myview(request): 
    return HttpResponseRedirect(reverse('arch-summary', args=[1945])) 

कहाँ args संतुष्ट अपने यूआरएल के नियमित अभिव्यक्ति में सभी तर्कों। आप एक शब्दकोश पास करके नामांकित तर्क भी प्रदान कर सकते हैं।

+0

बहुत बढ़िया , सहायता के लिए धन्यवाद! मैं सिर्फ django दस्तावेज़ों के माध्यम से सभी गलत खोज कर रहा होगा। –

7

लिखने का एक और संक्षिप्त तरीका यह है कि यदि कथन if request.session.get('user') होगा। has_key आजकल बहिष्कृत है, और .get() देता है कोई नहीं (डिफ़ॉल्ट रूप से, दूसरे पैरामीटर को पार करके परिवर्तनीय)। तो Soviut के जवाब के साथ इस संयोजन:

from django.core.urlresolvers import reverse 

def login(request): 
    if request.session.get('user'): 
     return HttpResponseRedirect(reverse('my-named-url')) 
4

सही जवाब Django 1.3 onwards, जहां रीडायरेक्ट विधि परोक्ष एक रिवर्स कॉल करता है से, यह है:

from django.shortcuts import redirect 

def login(request): 
    if request.session.get('user'): 
     return redirect('named_url') 
संबंधित मुद्दे