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.

È stato utile?

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 /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top