2009-07-30 10 views
18

Ich schreibe eine Mitglied-basierte Webanwendung, und ich muss in der Lage sein, die Seite nach der Anmeldung umzuleiten. Ich möchte die benannte URL aus meinem urls.py-Skript in meiner Datei views.py für die Login-Anwendung verwenden, aber ich kann nicht für das Leben von mir herausfinden, was zu tun ist. Was ich habe, ist dies:Django und urls.py: Wie kann ich HttpResponseRedirect über eine benannte URL?

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

Was will ich bewerkstelligen ist so etwas wie:

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

ich Syntaxfehler, wenn ich dies ausführen, irgendwelche Ideen?

Antwort

34

Sie müssen die reverse() Utils-Funktion verwenden.

from django.core.urlresolvers import reverse 

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

Wo args erfüllt alle Argumente in Ihrem regulären Ausdruck der URL. Sie können benannte Argumente auch übergeben, indem Sie ein Wörterbuch übergeben.

+0

Ehrfürchtig , Danke für die Hilfe! Ich muss gerade die Django-Docs alles falsch durchsucht haben. –

7

Eine prägnantere Art zu schreiben, dass if-Anweisung wäre if request.session.get('user'). has_key ist heutzutage veraltet, und .get() gibt None zurück (standardmäßig änderbar, indem ein zweiter Parameter übergeben wird). Kombination dieser Also mit Soviut Antwort:

from django.core.urlresolvers import reverse 

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

Die richtige Antwort von Django 1.3 onwards, wo die Umleitung Methode implizit tut ein Reverse-Aufruf sehen, ist:

from django.shortcuts import redirect 

def login(request): 
    if request.session.get('user'): 
     return redirect('named_url') 
Verwandte Themen