2011-09-02 14 views
6

Sto creando un progetto Django. Tuttavia, ho incontrato un piccolo singhiozzo. Il mio urls.py assomiglia a questoDjango reindirizza alla radice da una vista

url(r'^login/(?P<nextLoc>)$', 'Home.views.login'), 
url(r'^logout/$', 'Home.views.logout'), 

mio views.py in app casa è la seguente:

def login(request,nextLoc): 
    if request.method == "POST": 
     form = AuthenticationForm(request.POST) 
     user=auth.authenticate(username=request.POST['username'],password=request.POST['password']) 
     if user is not None: 
      if user.is_active: 
       auth.login(request, user) 
       return redirect(nextLoc) 
      else: 
       error='This account has been disabled by the administrator. Contact the administrator for enabling the said account' 
     else: 
      error='The username/password pair is incorrect. Check your credentials and try again.' 

    else: 
     if request.user.is_authenticated(): 
      return redirect("/profile/") 
     form = AuthenticationForm() 
     error='' 
    return render_to_response('login.html',{'FORM':form,'ERROR':error},context_instance=RequestContext(request)) 

def logout(request): 
    auth.logout(request) 
    return redirect('/') 

Ora quando vado alla pagina di login, si sta aprendo come previsto. Dopo aver inviato il modulo, viene visualizzato un errore che dice che non è possibile trovare gli url del modulo. Dopo aver scavato un po ', ho notato che il redirect ("/") in realtà si traduce in http://localhost/login/ anziché http://localhost/. Lo stesso accade nel logout, cioè tenta di aprire l'url http://localhost/logout/ anziché http://localhost/. Fondamentalmente, quando la pagina aperta è http://localhost/login, lo redirect('/') aggiunge/alla fine dell'URL corrente, e voila - Ricevo un URL che non mi aspettavo - http://localhost/login/. Non riesco a farlo reindirizzare alla radice del sito usando il reindirizzamento.

Please help me con questo e, se possibile anche spiegare la causa di questo comportamento irrazionale di Django

+1

Hai provato HttpResponseRedirect? dall'importazione django.http HttpResponseRedirect def disconnessione (richiesta): \t ritorno HttpResponseRedirect ("/") –

+0

dov'è il resto della tua urls.py? Quale vista corrisponde a "/"? – jterrace

risposta

3

Se si guarda al documentation for redirect, ci sono diverse cose che puoi passare alla funzione:

  • A nome del modello
  • Una vista
  • Un URL

In generale, penso che sia meglio reindirizzare a un nome di vista piuttosto che a un URL. Nel tuo caso, supponendo che l'urls.py ha una voce che assomiglia a:

url(r'^$', 'Home.views.index'), 

vorrei utilizzare invece di reindirizzare in questo modo:

redirect('Home.views.index') 
+2

jterrace ha ragione, dal momento che stai usando 'url()' puoi 'name' it' url (r '^ $', 'Home.views.index', name = "home_index") 'e usalo nella vista come 'return HttpResponseRedirect (reverse ('home_index'))' anche usarlo nel template con 'home' – Pannu

Problemi correlati