Django rediriger vers la racine à partir d'une vue
Je suis entrain de créer un projet django. Cependant, j'ai rencontré un petit hoquet. Mon urls.py on dirait que cette
url(r'^login/(?P<nextLoc>)$', 'Home.views.login'),
url(r'^logout/$', 'Home.views.logout'),
Mon views.py dans la Maison de l'app est comme suit:
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('/')
Maintenant, quand je vais à la page de connexion, elle s'ouvre comme prévu. Après avoir soumis le formulaire, j'obtiens un message d'erreur qui dit qu'il ne peut pas trouver le module d'url. Après avoir creusé un peu, j'ai remarqué que la redirection("/") en fait se traduit par http://localhost/login/
au lieu de http://localhost/
. La même chose arrive dans la déconnexion, c'est à dire qu'il essaie de l'ouverture de l'url http://localhost/logout/
au lieu de http://localhost/
. Fondamentalement, lorsque la page est ouverte est http://localhost/login
, le redirect('/')
ajoute le /à la fin de l'url courante, et voila - je obtenir une url que je n'attendais pas - http://localhost/login/
. Je n'arrive pas à rediriger vers la racine du site à l'aide de la redirection.
Merci de m'aider avec cela et si possible aussi d'expliquer la cause de ce comportement irrationnel de Django
- Avez-vous essayé HttpResponseRedirect ? de django.http importation HttpResponseRedirect def logout(demande): retour HttpResponseRedirect("/")
- où est le reste de votre urls.py? Ce qui correspond à "/" ?
Vous devez vous connecter pour publier un commentaire.
Si vous regardez la documentation pour rediriger, il ya plusieurs choses que vous pouvez passer à la fonction:
En général, je pense que c'est mieux de rediriger un nom de vue plutôt qu'une URL. Dans votre cas, en supposant que votre urls.py a une entrée qui ressemble à quelque chose comme:
Je serait plutôt de l'utilisation de redirection comme ceci:
url()
vous pouvezname
ilurl(r'^$','Home.views.index',name="home_index")
et de l'utiliser dans la vue commereturn HttpResponseRedirect(reverse('home_index'))
également l'utiliser dans le modèle avec le<a href={% url home_index %}>home</a>