Render alla risposta a un URL reindirizzato in Django
-
19-09-2019 - |
Domanda
In uno scenario di modulo di presentazione, la forma è posta a "/ Invia". Voglio riorientare all'utente di "/ Successo" in caso di successo e passare rendere qualche messaggio a un modello al nuovo URL. Come fare questo in Django? render_to_response non fa reindirizzare e HttpResponseRedirect non fa il rendering modello.
Soluzione
Se la pagina di successo ha bisogno di un messaggio di dinamica, è necessario passare lì in qualche modo. È possibile farlo tramite parametri GET nell'URL vengono reindirizzati a - ad esempio return HttpResponseRedirect('/success/?msg=My+success+message+here')
-. Oppure impostando alcuni valori nella sessione, che la vista di successo può raccogliere
Altri suggerimenti
La risposta da Daniel Roseman è potenzialmente pericoloso , aprire il sito per le vulnerabilità XSS.
Assicurati di striscia tag html da qualunque è passato il messaggio se deve fare in questo modo.
Un modo migliore sarebbe quello di reindirizzare a / successo / msg = ok, e avere in vista un dizionario:?
{ 'ok': 'Your success message' }
Il modo migliore per fare quello che vuoi è: Secondo lei impostare il messaggio di successo (o messaggio di errore) come dict. E utilizzare il render_to_response per visualizzare qualsiasi modello.
Nel modello è possibile verificare se c'è un messaggio e se il messaggio è un messaggio di errore o un messaggio di successo.
Alcuni, come questo: Secondo lei:
if anyError:
dict = {"message" : {"error" : "The error message"}}
else:
dict = {"message" : {"success" :"The success message"}}
nel modello:
{% if message %}
{% if message.error %}
{{ message.error }}
{% else %}
{{ message.success }}
{% endif %}
{% endif %}
La speranza ho aiutato
Non v'è alcun buon modo per fare quello che vuoi. Il browser invia il modulo, che avrà l'utente a / inviare. Una volta che si decide se si tratta di "successo", è troppo tardi; il browser ha già deciso la sua destinazione. Tutto quello che puoi fare è reindirizzare. Ma, come si sta scoprendo, che sta per essere difficile mantenere il vostro stato POST quando si reindirizza.
vorrei rinunciare a questo. Non è come i siti web dovrebbero funzionare.
Credo che Django fa già se si estende il vista generico . Su creare c'è un argomento "post_save_redirect" opzionale. Questa funzionalità è utilizzato nel sistema di amministrazione Django generato automaticamente. Per esempio, se si desidera una nuova risorsa, ad esempio utente, si va al url "/ utente / aggiungere". Dopo aver inviato ti reindirizza a "/ utente / 1" con un messaggio di successo "appena salvato utente # 1". Quindi questo è possibile, ma sto ancora ricercando come farlo senza estendere la vista generico. Sono ancora molto nuovo a Django e Python, così guardando attraverso nucleo Django per scoprire come hanno fatto non è così facile per me.
mi sento di raccomandare di utilizzare framework Django messaggio che viene utilizzato per i messaggi di notifica di una volta.
https://docs.djangoproject.com/en/1.8/ref / contrib / messaggi /