Django und urls.py: Wie kann ich über eine benannte URL geprägt werden?
-
05-07-2019 - |
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?
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