Rendern der Antwort auf eine url umgeleitet, der in Django
In ein Formular übertragen Szenario, form post "/submit". Ich möchte umleiten Benutzer "/Erfolg" auf Erfolg und pass Rendern eine Nachricht an ein template auf die neue url. Wie dies bei Django? render_to_response nicht umleiten und HttpResponseRedirect nicht tun, template rendering.
- Ich nehme an, HttpResponseRedirect nur teilt dem client umleiten? Würde nicht die Seite leitet er verantwortlich für das rendering? Auch, was ist, wenn jemand manuell geht zu Ihrer /eurer Seite Erfolg?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Erfolg Seite benötigt eine dynamische Botschaft, die Sie übergeben müssen es irgendwie. Entweder können Sie dies über GET-Parameter in der URL, die Sie umleiten an - z.B.
return HttpResponseRedirect('/success/?msg=My+success+message+here')
- oder indem Sie einige Werte in der session, die den Erfolg anzeigen, abholen können.Die Antwort von Daniel Roseman ist potenziell gefährlich, öffnen Sie Ihre Website auf XSS-Schwachstellen.
Stellen Sie sicher, dass Sie Streifen html-tags aus, was Botschaft ist bestanden, wenn Sie muss tun es auf diese Weise.
Eine bessere Möglichkeit wäre die Umleitung zu /success/?msg=ok, und in Ihrem Blick ein Wörterbuch:
Der beste Weg, das zu tun, was Sie wollen, ist:
Ihrer Ansicht nach legen Sie die Erfolgsmeldung (oder Fehlermeldung) als dict. Und verwenden Sie die render_to_response anzeigen-Vorlage.
In Ihre Vorlage können Sie überprüfen, wenn es eine Botschaft und wenn die Nachricht eine Fehlermeldung oder eine Erfolgsmeldung.
Etwas wie dieses:
Aus Ihrer Sicht:
in Ihre Vorlage ein:
Hoffe, dass ich geholfen habe,
Es ist kein guter Weg, das zu tun, was Sie wollen. Der browser legt die form, die den Benutzer zu /senden. Wenn Sie sich entscheiden, ob es "erfolgreich" ist, ist es zu spät; der browser sich bereits entschieden hat, es ist Ziel. Alles, was Sie tun können, ist, umleiten. Aber wie Sie finden heraus, es wird schwer sein, halten Sie Ihre POST-Zustand, wenn Sie umleiten.
Ich würde geben, bis auf diese. Es ist nicht, wie websites funktionieren soll.
Ich denke, dass Django tut dies bereits, wenn Sie erweitern, die generische Sicht. Auf erstellen, gibt es ein optionales argument "post_save_redirect". Diese Funktionalität wird in der automatisch generierten Django-admin-system. Zum Beispiel, wenn Sie möchten, eine neue Ressource, sagen Benutzer, gehen Sie auf die url "/user/add". Nachdem Sie Einreichen, leitet es Sie zu "/user/1" mit einer Erfolgs-Meldung", die Sie gerade gespeichert user #1". Damit dies möglich ist, aber ich bin immer noch recherchieren, wie es zu tun, ohne die Verlängerung der Allgemeinen Sicht. Ich bin noch sehr neu auf Django und python, so suchen Sie durch Django Kern zu finden, wie Sie es Taten, ist nicht so einfach für mich.
Ich würde empfehlen die Verwendung von Django Nachricht framework, welches eingesetzt wird zur one-time-Benachrichtigungen.
https://docs.djangoproject.com/en/1.8/ref/contrib/messages/