Django HttpResponseRedirect
J'ai créé un formulaire de contact de base, et lorsque l'utilisateur soumet des informations, il doit rediriger vers la page de remerciement.
C'est le code que j'ai dans le views.py fichier:
def contact(request):
# if no errors...
return HttpResponseRedirect('/thanks/')
C'est ce que j'ai dans le urlpatterns dans le urls.py fichier:
(r'^contact/$', contact),
(r'^contact/thanks/$', contact_thanks),
Les deux pages de travail à l'codée en dur dans l'URL. Cependant, lorsque je soumets le formulaire de contact //on redirige vers /de contact (pas de fin de barre oblique), ce qui est un non-existant de la page (que ce soit une erreur 404 ou une page d'erreur me disant j'ai besoin d'une barre oblique). Quelle est la raison pour laquelle il n'est pas correctement de redirection, et comment puis-je résoudre ce problème? Je vous remercie.
Mise à JOUR: le retour HttpResponseRedirect('/contact/merci/') est ce que j'ai maintenant, mais le problème est que le bouton de soumission (à l'aide de POST) ne pas rediriger vers l'URL -- il n'a pas de redirection.
Je pense que @vad est correct.
OriginalL'auteur David542 | 2011-04-28
Vous devez vous connecter pour publier un commentaire.
Il n'est pas le POSTE le bouton qui doit rediriger, mais le point de vue.
Si non spécifié autrement, la forme (le formulaire HTML de la balise) Postes vers la même URL. Si le formulaire est sur /contact/, il poste sur /contact/(avec ou sans slash, c'est la même chose).
C'est dans la vue que vous devez rediriger à la grâce. À partir de la doc:
Changement
/thanks/
à/contact/thanks/
et vous avez terminé.les données? que voulez-vous dire?
Les données désigne toute information, à partir d'un point de vue à un autre point de vue. par exemple, Pouvons-Nous faire de cette façon, data = {'xyz': 'abcd', 'ddd': "yyyy"} return HttpResponseRedirect('/contact/merci/', data)
. I am new in django, and I reading doc also but I am not getting a way to do it.
restituer " est un moyen mais je ne veux pas aller à n'importe quelle page de votre navigateur. il suffit de transférer des données entre des points de vue.Je sais que c'est un ancien commentaire, mais oui, vous pouvez envoyer des données via la querystring le long des lignes de cette: redirect_url = '{redirect_url}?{querystring}'.format( redirect_url=reverse("YOUR_VIEW_NAME", kwargs={'named_keywork': obj.pk}), querystring=urlencode( {'xyz': 'abcd', 'ddd': "yyyy"}, macro=True ) )
nous pouvons également utiliser la fonction d'inversion avec django 2.1 (pas sûr sur les anciennes versions). Exemple:
HttpResponseRedirect(reverse('view_name'))
, d'où le nom de la vue est spécifié dansurls.py
OriginalL'auteur vad
toutes les réponse sont correctes mais la meilleure approche est de ne pas coder en dur l'url de point de vue,au lieu de donner des noms à vos urls dans url.py et de faire allusion à eux dans les vues avec fonction d'inversion,comme ci-dessous :
dans l'url.conf :
et de conseil dans les vues comme ceci :
c'est mieux pour l'avenir de l'approche et de suivre le principe SEC de djano
Si il y a beaucoup d'url, puis
reverse
est au-dessus. Je pense que coder en dur l'oif url sera la cause d'une plus grande surcharge pour les développeurs, plus tard, si l'on change l'urlVous aurez besoin de cette importation:
from django.urls import reverse
OriginalL'auteur alireza sadeghpour
Je crois que, en dehors de Aviral Dasgupta la solution de l'OP doit également changer l'url relative.
à
/thanks/
devrait prendre l'url de la racine:yoursite/thanks/
et pasyoursite/contact/thanks/
.OriginalL'auteur
Juste de l'essayer. Il a travaillé pour moi.
Remarque:- Supprimer la barre oblique avant
OriginalL'auteur Jasmeet Singh
Utiliser le Django APPEND_SLASH réglage.
APPEND_SLASH
Il pourrait ne pas être le cas des OP de projet, ou il a peut-être changé involontairement.
Le paramètre est True
OriginalL'auteur aviraldg