Dans un scénario de soumission de formulaire, le formulaire est envoyé à "/ submit". Je veux rediriger l'utilisateur vers "/ sucess" en cas de succès et transmettre un message à un template à la nouvelle URL. Comment faire cela dans Django? render_to_response ne fait pas de redirection et HttpResponseRedirect ne fait pas de rendu de template.Rendu de la réponse à une URL redirigée dans Django
Répondre
Si votre page de réussite a besoin d'un message dynamique, vous devez la transmettre d'une manière ou d'une autre. Vous pouvez soit le faire via les paramètres GET dans l'URL que vous redirigez vers - par exemple return HttpResponseRedirect('/success/?msg=My+success+message+here')
- soit en définissant des valeurs dans la session, ce que la vue de réussite peut prendre en compte.
Il n'y a pas de bonne façon de faire ce que vous voulez. Le navigateur soumet le formulaire, ce qui amène l'utilisateur à/soumettre. Une fois que vous décidez si c'est "réussi", il est trop tard; le navigateur a déjà décidé de sa destination. Tout ce que vous pouvez faire est de rediriger. Mais, comme vous le savez, il sera difficile de garder votre état POST lorsque vous redirigez.
J'abandonnerais ça. Ce n'est pas la façon dont les sites Web sont censés fonctionner.
La réponse de Daniel Roseman est potentiellement dangereux, ouvrant votre site aux vulnérabilités XSS.
Assurez-vous de supprimer les balises html de tout message passé si vous devez le faire de cette façon.
Une meilleure façon serait de rediriger vers/succès/msg = ok, et d'avoir à votre avis un dictionnaire:
{ 'ok': 'Your success message' }
Je pense que Django le fait déjà si vous prolongez le generic view. A la création, il y a un argument optionnel "post_save_redirect". Cette fonctionnalité est utilisée dans le système d'administration Django généré automatiquement. Par exemple si vous voulez une nouvelle ressource, dites utilisateur, vous allez à l'url "/ user/add". Une fois que vous l'avez envoyé, il vous redirige vers "/ user/1" avec un message de réussite "Vous venez de sauvegarder l'utilisateur n ° 1". Donc, c'est possible, mais je suis toujours en train de chercher comment le faire sans étendre la vue générique. Je suis encore très jeune avec Django et python, donc regarder à travers le noyau de Django pour trouver comment ils l'ont fait n'est pas si facile pour moi.
La meilleure façon de faire ce que vous voulez est: Dans votre vue, définissez le message de réussite (ou le message d'erreur) comme dict. Et utilisez le render_to_response pour afficher n'importe quel modèle.
Dans votre modèle, vous pouvez vérifier s'il y a un message et si le message est un message d'erreur ou un message de réussite.
Certains comme ceci: Selon vous:
if anyError:
dict = {"message" : {"error" : "The error message"}}
else:
dict = {"message" : {"success" :"The success message"}}
dans votre modèle:
{% if message %}
{% if message.error %}
{{ message.error }}
{% else %}
{{ message.success }}
{% endif %}
{% endif %}
espoir que je l'ai aidé
Je recommande d'utiliser le cadre de message Django qui est utilisé pour les messages de notification ponctuels.
- 1. Réécrire une URL redirigée avec mod_rewrite
- 2. Comment javascript dois-je appeler juste avant une réponse redirigée
- 3. iPhone NSURL dernière obtenir url redirigée
- 4. Réécrivez une URL qui a déjà été redirigée?
- 5. Bar Emplacement n'affiche pas URL redirigée
- 6. Obtenez une réponse POST à partir d'une URL et imprimer la réponse à la page?
- 7. Comment accéder à une URL redirigée à partir de ma servlet Java?
- 8. Rendu CSS dans Django
- 9. Rediriger une page déjà redirigée
- 10. Django Middleware + URL
- 11. La méthode url d'ImageField renvoie une valeur non Url - Django
- 12. Analyse de la réponse JSON Bit.ly dans Javascript (url dans la réponse json)
- 13. django, rendre à la réponse en prenant beaucoup de temps
- 14. Django: Obtenir manuellement la vue correspondant à une URL
- 15. Gestion de l'URL redirigée dans l'application Flex?
- 16. Android: obtenir une réponse d'une URL https
- 17. Ajoute la réponse BOM à XML de Django
- 18. Comment envoyer une réponse vide dans Django sans modèles
- 19. Django - réponse flush?
- 20. Récupération de l'URL redirigée à partir de l'URL d'origine
- 21. php curl - url d'accès via la réponse du navigateur: 200 url d'accès via curl réponse: 401?
- 22. Django formulaire Personnalisation rendu
- 23. Navigation dans la page/La phase de réponse de rendu est ignorée lorsque la réponse contient un fichier
- 24. Rendu à une partie de la texture
- 25. Django blog système de réponse
- 26. Rendu de la réponse XML sur le problème Grails
- 27. Forcer une réponse incorrecte à l'aide de la réponse ActiveMerchant
- 28. Rendu Bouton Radio Django
- 29. comment rendre à la réponse?
- 30. url dans JSON, jquery réponse ajax
Je suppose que HttpResponseRedirect dit le client de rediriger? La page redirigée ne serait-elle pas responsable du rendu? En outre, que se passe-t-il si quelqu'un va manuellement à votre/page de succès? –