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?

È stato utile?

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'))

Vedi anche https: // docs .djangoproject.com / it / dev / argomenti / http / URL / # reverse-risoluzione-di-urls

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top