Domanda

Io sono nei guai con un'applicazione web con tornado che ho bisogno di un po 'di aiuto. Ho più caselle di controllo con lo stesso nome e mi piacerebbe POST i valori di quello selezionato.

<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>

posso ottenere i valori di ogni con javascript pre-post, ma sto avendo problemi ottenere questa lista sul (tornado) lato pitone. Ho solo il più alto valore selezionato.

sul lato pitone sembra che:

...

def post(self):
    email = self.get_argument("email")
    activity = self.get_argument("activity")
È stato utile?

Soluzione

E 'bene lasciare che più tag hanno lo stesso nome di attributo, ma il id Attributi deve essere unico - qui, sono non (a meno che ciascuno di questi occorrenze della DB_BASED_ID identica sia in qualche modo deve essere sostituito con un diverso valore? Ma allora perché non mostrare le cose effettivamente distinti, in quanto appaiono nel vero HTML ?!), rendendo questo HTML non valido e soggetti a ogni tipo di problema.

Una volta che questo problema viene risolto, in quei metodi del gestore, self.request.arguments['activity'] (se la chiave stringa è presente in detta directory) sarà un elenco di valori non vuoti per tutti gli ingressi denominati 'activity' (se presente).

Altri suggerimenti

Questo può anche essere realizzato con un ciclo per la presentazione dinamica e raccolta. Ipoteticamente, se si fornisce un elenco di controllare da nel metodo GET, che può essere visualizzata in questo modo in HTML:

<p><h3>Select Applicable Characteristics:</h3></p>
{% for c in chars %}
    <p><h4><input type="checkbox" name="{{ c }}" value="{{ c }}"/> {{ c }}</h4></p>
{% end %}

Il metodo POST può scorrere quella lista, raccogliere per ciascuno e per creare un ingresso lista. E 'un po' più tecnico, ma non ho potuto fare il già citato lavoro di soluzione.

# Characteristics loop
chars = [x.split('_')[1] for x in bs.attr.keys('chr_*')]
checked_chars = []
for c in chars:
    checked = self.get_argument(c, None)
    if checked is not None:
        checked_chars.append(checked)

Questa template mietitrebbie Tornado (Jinja2) caratteristica con un po 'HTML per una semplice interfaccia. Doable e veloce, certamente non la migliore soluzione di produzione. Spero che questo aiuti!

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