Preservare stati casella di controllo sulla stessa pagina con i risultati della query
Domanda
sto usando Django, e hanno una pagina web statica con un modulo GET, e circa 30 caselle. L'utente seleziona varie caselle, e clic di ricerca, e di conseguenza da un database viene restituito alla stessa pagina in una tabella. Tuttavia, tutte le caselle di controllo sono stati cancellati, in quanto HTML è senza stato.
Qual è la soluzione più semplice per 'ricordare' lo stato delle caselle di controllo? Ho guardato attraverso Django documenti, ma gli esempi basta usare una variabile e un IF per una singola forma di testo. Sicuramente, non devo controllare se ogni casella di controllo si trova nel QueryDict? Inoltre, il mio modulo è stato personalizzato creato, invece di usare le forme Django.
Alla fine, avevo intenzione di usare JSON per la pagina e aggiornare solo il tavolo, e che avrebbe risolto il problema, ma non sono sicuro se sarebbe introdurre molti di più, ad esempio, di nuovo il pulsante non funziona per le ricerche precedenti.
Soluzione
"Qual è la soluzione più semplice per 'ricordare' lo stato delle caselle di controllo?"
transazioni Web sono apolidi.
Ci sono diversi modi comuni per implementare lo stato.
-
Sessioni. Se l'utente è connesso, hanno una sessione. roba Conservare nella loro sessione. La forma che post prosegue nella sessione. Questo può essere recuperato per poter inserire una nuova forma di nuovo loro.
-
Cookie. Sessioni utilizzano i cookie. È possibile utilizzare i cookie manualmente. Hai due scelte qui.
-
Inserire le informazioni casella di controllo modulo nel biscotto. Invia giù con la risposta. Controllare il cookie in ogni richiesta in modo da sapere cosa seminare il modulo.
-
Mettere una chiave di sessione nel cookie. Questo è ciò che fa per voi Django. Non implementare da soli.
-
-
stringhe di query nell'URL. Avete gli stessi due scelte con i biscotti. O fare le impostazioni di un grande vecchio stringa base64 o passare un ID che si trova in per la sessione.
Altri suggerimenti
Ci sono modi per risolvere il problema pulsante Indietro (tag hash e quant'altro allegati a un URL). Tuttavia, il modo in cui ho sempre compiuto questo è attraverso proprio questo. In sostanza, vorrei passare le caselle di controllo come un array in POST e poi, quando si va a farli, basta fare un loop che farà tutte le caselle di cui avete bisogno, e verificare contro POST per vedere se è stata selezionata o meno. Oltre a questo, non lo so.
Utilizzo GET? Buono. Accedere alle caselle di controllo allo stesso modo si accede ai dati TextField.
request.GET [ 'yourfield']
Utilizza staments stampa per controllare le informazioni disponibili in GET.
Stampa request.GET [ 'yourfield']
Se si sta utilizzando un oggetto Form, allora si può solo passare il costruttore la richiesta e da fare con esso. Se stai facendo manualmente, dovrete fare un po 'finangling con la sessione.