Frage

In einem Formulareinreichung Szenario ist Form Post "/ Eintragen". Ich möchte „/ Sucess“ Benutzer umleiten auf Erfolg und gab eine Botschaft zu einer Vorlage an neuen url machen. Wie dies in Django zu tun? render_to_response nicht umleiten und HttpResponseRedirect nicht Vorlage Rendering tun.

War es hilfreich?

Lösung

Wenn Sie Ihren Erfolg Seite eine dynamische Nachricht braucht, müssen Sie es irgendwie dort passieren. Sie können zu diesem Zweck entweder über GET-Parameter in der URL, die Sie umleiten - zB return HttpResponseRedirect('/success/?msg=My+success+message+here') -. Oder durch einige Werte in der Sitzung festzulegen, die der Erfolg Ansicht abholen

Andere Tipps

Die Antwort von Daniel Roseman ist möglicherweise gefährlich , öffnen Sie Ihre Website zu XSS-Schwachstellen.

Stellen Sie sicher, HTML-Tags aus welcher Nachricht übergeben wird abzustreifen, wenn Sie auf muss es auf diese Art und Weise tun.

Eine bessere Art und Weise zu / Erfolg umleiten würde / msg = ok, und ein Wörterbuch Ihrer Ansicht nach haben:

{ 'ok': 'Your success message' }

Der beste Weg, zu tun, was Sie wollen, ist: Ihrer Ansicht nach setzt die Erfolgsmeldung (oder Fehlermeldung) als dict. Und verwenden Sie die render_to_response jede Vorlage angezeigt werden soll.

In der Vorlage können Sie überprüfen, ob es eine Nachricht ist und wenn die Nachricht eine Fehlermeldung oder eine Erfolgsmeldung.

Einige wie folgt aus: Ihrer Ansicht nach:

if anyError:
   dict = {"message" : {"error" : "The error message"}}
else:
   dict = {"message" : {"success" :"The success message"}}

in der Vorlage:

   {% if message %}
      {% if message.error %}
         {{ message.error }}
      {% else %}
         {{ message.success }}
      {% endif %}
   {% endif %}

hoffte, ich habe geholfen,

Es gibt keine gute Möglichkeit, zu tun, was Sie wollen. Der Browser sendet das Formular, das den Benutzer in Anspruch nehmen wird / einreichen. Wenn Sie sich entscheiden, ob es „erfolgreich“, ist es zu spät; hat der Browser bereits auf ihr Ziel entschieden. Alles, was Sie tun können, ist umleiten. Aber, wie Sie herausfinden, es wird schwer sein, Ihren POST Zustand zu halten, wenn Sie umgeleitet werden.

Ich würde auf diese verzichten. Es ist nicht, wie Websites funktionieren sollen.

Ich denke, Django tut dies bereits, wenn Sie die . Auf erstellen gibt es ein optionales Argument „post_save_redirect“. Diese Funktionalität wird in dem automatisch generierten Django Admin-System verwendet. Wenn Sie zum Beispiel eine neue Ressource wollen, sagen Benutzer, gehen Sie auf die URL „/ user / hinzufügen“. Nachdem Sie legt er leitet Sie auf „/ user / 1“ mit einer Erfolgsmeldung „Sie nur Benutzer # 1 gespeichert“. Das ist also möglich, aber ich bin die Erforschung noch wie es zu tun, ohne die allgemeine Ansicht erstreckt. Ich bin immer noch sehr neu für Django und Python, so durch Django Kern der Suche zu finden, wie sie tat es für mich nicht so einfach ist.

Ich würde empfehlen, Django Nachricht Rahmen zu verwenden, die für die einmaligen Benachrichtigungsmeldungen verwendet wird.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top