2012-11-06 18 views
6

Sto cercando di utilizzare le checkbox nel mio HTML, restituire queste checkbox al mio backend python e quindi incrementare tre contatori se si fa clic sulla casella.Come prendere caselle di controllo in Python

questo momento il mio HTML è il seguente e funziona bene:

<form method="post"> 
    <input type="checkbox inline" name="adjective" value="entertaining">Entertaining 
    <input type="checkbox inline" name="adjective" value="informative">Informative 
    <input type="checkbox inline" name="adjective" value="exceptional">Exceptional 
</form> 

e poi sul mio pitone backend Ho il seguente:

def post(self): 
    adjective = self.request.get('adjective ') 

    if adjective : 
     #somehow tell if the entertaining box was checked 
     #increment entertaining counter 
     #do the same for the others 
+0

Penso che forse rendono il nome in html "aggettivo []" ... forse ... –

+0

ti conosco si può semplicemente 'aggettivo stampa 'per vedere cosa c'è lì dentro, giusto? Finirà per mescolare con il tuo codice HTML, ma puoi semplicemente vedere il sorgente per dare un'occhiata ... – kindall

+0

@kindall che sarebbe buono per il debug ma ho bisogno di farlo programmaticamente in modo che funzioni ogni volta sul backend – clifgray

risposta

7

Quando il modulo dispone di più caselle di controllo con lo stesso attributo name, la richiesta quando il modulo viene inviato avranno più valori per quel nome.

Il codice corrente utilizza Request.get per ottenere un valore, ma questo recupererà solo il primo valore se ce n'è più di uno. Invece, è possibile ottenere tutti i valori utilizzando Request.get_all(name) (in webapp) o Request.get(name, allow_multiple=True) (in webapp2). Ciò restituirà una (possibilmente vuota) lista con tutti i valori per quel nome.

Ecco come si potrebbe usare in nel codice:

def post(self): 
    adjectives = self.request.get('adjective' allow_multiple=True) 
    for a in adjectives: 
     # increment count 
     self.adjective_count[a] += 1 # or whatever 

     # do more stuff with adjective a, if you want 

    # do other stuff with the request 
+0

grazie! ha senso ma non riesco a trovare tutto questo facilmente online – clifgray

+0

Penso che [questo] (http://webapp-improved.appspot.com/guide/request.html) sia la sezione pertinente dei documenti. – Blckknght

0

wouldnt sarebbe più facile cambiare il nome =" "e metterlo lo stesso come il valore, in modo da poter chiedere finite

CASO divertente:

Se informativo:

im nessun programmatore python solo dire farvi alcun

+0

sì, sono d'accordo che questo è un po 'più facile ma non penso che sia davvero il modo corretto. Potrei sbagliarmi comunque. – clifgray

+0

è lì come un'istruzione switch in cui come se == aggettivo del divertimento: // codice di stampa o passare caso 1 se == aggettivo divertente: // eseguire caso 2 se == aggettivo informativo: // execute – ELHippie

+0

Python non ha un'istruzione switch. Di solito l'alternativa è usare un dizionario. Ma temo di non capire realmente il tuo codice suggerito (potrebbe essere utile inserirlo nella risposta, dove puoi formattarlo correttamente). – Blckknght