Question

Dans un scénario de soumission du formulaire, la forme est la poste à « / soumettre ». Je veux rediriger l'utilisateur vers « / sucess » sur la réussite et de transmettre rendent un message à un modèle à la nouvelle URL. Comment faire dans Django? render_to_response ne fait pas redirect et HttpResponseRedirect ne fait pas rendu de modèle.

Était-ce utile?

La solution

Si votre page de succès a besoin d'un message dynamique, vous devez passer là en quelque sorte. Vous pouvez le faire via les paramètres GET dans l'URL que vous redirigez à - par exemple return HttpResponseRedirect('/success/?msg=My+success+message+here') -. Ou en définissant des valeurs de la session, le point de vue de la réussite peut ramasser

Autres conseils

La réponse de Daniel Roseman est potentiellement dangereux , l'ouverture de votre site pour les vulnérabilités XSS.

Assurez-vous dépouillez les balises HTML de tout message est passé si vous doit 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' }

La meilleure façon de faire ce que vous voulez est: Selon vous définissez le message de réussite (ou message d'erreur) comme dict. Et utiliser le render_to_response pour afficher tout 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 %}

espère que je l'ai aidé

Il n'y a pas de bonne façon de faire ce que vous voulez. Le navigateur soumet le formulaire, qui prendra l'utilisateur / soumettre. Une fois que vous décidez si elle est « réussie », il est trop tard; le navigateur a déjà décidé de sa destination. Tout ce que vous pouvez faire est redirect. Mais, comme vous savoir, il va être difficile de garder votre état POST lorsque vous redirigez.

Je renoncerais à ce sujet. Ce n'est pas comment les sites Web sont censés travailler.

Je pense que Django le fait déjà si vous prolongez le vue générique . Sur créer il y a un argument optionnel « post_save_redirect ». Cette fonctionnalité est utilisée dans le système généré automatiquement admin Django. Par exemple, si vous voulez une nouvelle ressource, par exemple l'utilisateur, vous allez à l'URL « / user / add ». Une fois que vous soumettez vous redirige vers « / user / 1 » avec un message de réussite « vous venez d'enregistrer l'utilisateur # 1 ». Donc, cela est possible, mais je suis encore des recherches sur la façon de le faire sans étendre la vue générique. Je suis encore très nouveau pour Django et Python, en regardant à travers coeur Django pour trouver comment ils l'ont fait est pas si facile pour moi.

Je recommande d'utiliser le cadre de message Django qui est utilisé pour les messages de notification unique.

https://docs.djangoproject.com/en/1.8/ref / contrib / messages /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top