Domanda

Come ottenere il testo dell'elemento selezionato da un elemento della casella a discesa in moduli HTML? (usando Python) Come posso memorizzare il valore in una variabile, quando seleziono un elemento dalla casella a discesa usando il mouse? (ad es. senza utilizzare un pulsante di invio)

Questo è per un'applicazione che sto facendo nel motore di app che supporta solo Python.

È stato utile?

Soluzione

La tua domanda mostra alcuni malintesi su come applicazioni web funzionare.

L'utente deve digitare un indirizzo in un browser per accedere all'applicazione. Questo invia una richiesta al server. Il codice del server (scritto in Python) riceve questa richiesta e ha la possibilità di inviare una risposta. La risposta è un documento solitamente scritto in HTML . Alcune parti di questo documento possono essere dinamiche, ovvero generate dal codice Python. Altre parti del documento possono essere statiche. Il browser quindi esegue il rendering del documento nella finestra dell'utente.

Dopodiché, l'unico modo in cui il tuo codice Python può sapere qualcosa che accade nella finestra del browser o eseguire qualsiasi parte del codice Python è fare in modo che il browser invii un'altra richiesta.

Ciò può accadere in molte situazioni, l'essere più comune:

  • L'utente fa clic su un collegamento a un altro url, facendo in modo che il browser ne invii un altro richiesta a questo nuovo URL.
  • L'utente fa clic sul pulsante submit , facendo il browser invia il modulo come richiesta all'indirizzo configurato in attributo action del form.
  • Alcuni codici nella pagina attuale, generalmente scritti in ECMAscript (noto anche come javascript ), effettua una richiesta sotto il cofano.

Quest'ultimo è quello che vuoi. Devi scrivere in javascript del codice per fare in modo che il browser invii al server le informazioni scelte nel menu a discesa. In questo modo il tuo codice Python sul server può fare qualcosa al riguardo.

Il modo più semplice per farlo è fare in modo che l'evento onchange del menu a discesa invii:

<select name='myfield' onchange='this.form.submit()'>
<option .... >
...
</select>
</form>

In questo modo, quando l'utente modifica il valore nel menu a discesa, il modulo verrà inviato come se l'utente avesse fatto clic su Invia. Verrà eseguito il codice Python sul server. Il browser caricherà la risposta.

Un altro modo popolare sarebbe utilizzare XmlHTTPRequest di javascript per inviare la richiesta. In questo modo puoi ricevere il valore in python e inviare una risposta, che a sua volta verrà ricevuta dal codice javascript nel browser. Quel codice può cambiare parti della pagina in base alla risposta, senza cambiare l'intera pagina. Questa tecnica si chiama AJAX .

Se hai intenzione di scrivere un sacco di codice javascript, ti consiglio vivamente di utilizzare una libreria javascript almeno per alleviare il dolore di gestire molte versioni del browser. jQuery è la mia libreria preferita.

In altre parole, il codice scritto in javascript in esecuzione nel browser parla con il codice scritto in Python in esecuzione sul server.

Altri suggerimenti

Il tuo codice python viene eseguito sul server (google appengine). Il modulo HTML viene eseguito sul client (nel browser). Il client e il server comunicano tramite protocollo HTTP. Il client invia richieste e il server risponde con risposte . Devi inviare qualcosa al server, per far sapere al tuo codice Python le azioni dell'utente.

Sul lato client è possibile utilizzare Javascript (considerare l'utilizzo della libreria jQuery). Probabilmente puoi fuggire senza comunicare con il server.

Se devi comunicare con il server ma non vuoi ricaricare la pagina, usa Tecnica AJAX . In questo caso devi creare viste speciali nell'applicazione python e avviare richieste in Javascript.

Ricorda, Javascript è per il lato client, Python è per il lato server.

Se hai bisogno di inviare il valore selezionato al tuo server senza inviarlo, penso che il migliore (se non l'unico) approccio sarebbe usare un po 'di Ajax.

Se stai usando jQuery, dai un'occhiata a è roba ajax. ed è Modello di eventi . Dovrai prima collegare l'evento del menu a discesa alla funzione che desideri eseguire. Quindi, quando l'utente modifica il menu a discesa, il browser aprirà una nuova connessione dietro le quinte. Quindi, puoi ottenere quel valore e salvarlo sul lato server. Sarebbe sth. in questo modo:

$(document).ready( 

    $("#select_id").change(function() {
        $(this).getJSON("/method", {"selectValue":$(this).val()}, function() {
                   alert("value received!");
              });
    });

);

Spero che sia d'aiuto!

Il problema con l'utilizzo di onchange è che non tutti gli utenti utilizzano un mouse. Se hai una casella combinata e cambi il valore con la tastiera, non saresti mai in grado di superare il primo valore senza l'invio del modulo.

~ Cyrix

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