Frage

Ich schreibe eine von Mitgliedern basierende Webanwendung und muss in der Lage sein, die Seite nach dem Anmeldung umzuleiten. Ich möchte die benannte URL aus meinem URLS.Py -Skript in meinen Ansichten verwenden. Was ich habe, ist Folgendes:

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

Was ich erreichen möchte, 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 bekomme Syntaxfehler, wenn ich dies ausführe, irgendwelche Ideen?

War es hilfreich?

Lösung

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

from django.urls import reverse
# or Django < 2.0 : from django.core.urlresolvers import reverse

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

Wo args Befriedigt alle Argumente im regulären Ausdruck Ihrer URL. Sie können auch mit dem Namen Args mit dem Namen ein Wörterbuch liefern.

Andere Tipps

Die richtige Antwort von Django 1.3 ab, wo die Umleitungsmethode implizit einen Reverse Call erstellt, ist:

from django.shortcuts import redirect

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

Eine prägnantere Art zu schreiben, wenn Aussage wäre if request.session.get('user'). Has_key ist heutzutage veraltet, und .get () gibt keine zurück (standardmäßig, veränderlich durch Übergabe eines zweiten Parameters). Kombinieren Sie dies mit Soviuts Antwort:

from django.core.urlresolvers import reverse

def login(request): 
    if request.session.get('user'):
         return HttpResponseRedirect(reverse('my-named-url'))
from django.core.urlresolvers import reverse
from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect(reverse('name-of-url'))

Siehe auch https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top