Django e urls.py: come posso HttpResponseRedirect tramite un url con nome?
-
05-07-2019 - |
Domanda
Sto scrivendo un'applicazione Web basata sui membri e devo essere in grado di reindirizzare la pagina dopo l'accesso. Voglio usare l'URL chiamato dal mio script urls.py nel mio file views.py per l'applicazione di accesso, ma non posso per la vita di me capire cosa fare. Quello che ho è questo:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect('/path/to/page.html')
Quello che voglio realizzare è qualcosa di simile:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect url pageName
Ricevo errori di sintassi quando eseguo questo, qualche idea?
Soluzione
Devi utilizzare < code> reverse () funzione utils.
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]))
Dove args
soddisfa tutti gli argomenti nell'espressione regolare del tuo URL. Puoi anche fornire args con nome passando un dizionario.
Altri suggerimenti
La risposta giusta da Django 1.3 in poi , dove il metodo di reindirizzamento fa implicitamente una chiamata inversa, è:
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect('named_url')
Un modo più conciso per scrivere che l'istruzione if sarebbe if request.session.get ('user')
. has_key è deprecato al giorno d'oggi e .get () restituisce None (per impostazione predefinita, modificabile passando un secondo parametro).
Quindi combinando questo con la risposta di Soviut:
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'))