2012-11-06 13 views
6

Próbuję użyć pól wyboru w moim HTML, zwróć te pola wyboru do mojego Pythona, a następnie zwiększ trzy liczniki, jeśli pole zostanie kliknięte.Jak wziąć Checkboxes w Pythonie

Teraz mój HTML jest w następujący sposób i działa prawidłowo:

<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> 

a następnie na moim Pythona backend mam następujące:

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

Myślę, że może uczynić nazwę w html „przymiotnik []” ... może ... –

+0

Wiesz, można po prostu 'print przymiotnik 'zobaczyć, co tam jest, prawda? Kończy się to zmieszaniem z twoim HTML, ale możesz po prostu zobaczyć źródło, aby zobaczyć ... – kindall

+0

@klimall, który byłby dobry do debugowania, ale muszę to zrobić programowo, aby działał za każdym razem na zapleczu – clifgray

Odpowiedz

7

Gdy forma ma wiele pól wyboru, z tego samego atrybutu name, wniosek, gdy formularz jest składany będzie mieć wiele wartości dla tej nazwy.

Twój aktualny kod używa Request.get, aby uzyskać wartość, ale pobierze tylko pierwszą wartość, jeśli jest więcej niż jedna. Zamiast tego możesz uzyskać wszystkie wartości, używając Request.get_all(name) (w webapp) lub Request.get(name, allow_multiple=True) (w webapp2). Zwróci to (ewentualnie pustą) listę ze wszystkimi wartościami dla tej nazwy.

Oto jak można użyć w kodzie w:

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

dzięki! ma sens, ale nie mogłem znaleźć tego tak łatwo online – clifgray

+0

Myślę, że [this] (http://webapp-improved.appspot.com/guide/request.html) jest odpowiednią sekcją dokumentacji. – Blckknght

0

byłby łatwiej będzie zmienić nazwę =” "i umieścić go taka sama jak wartość, dzięki czemu można jsut zapytać

IF rozrywkowych:

Jeśli informacyjny:

im nie tylko programista python powiedzieć pozwalają nie

+0

tak Zgadzam się, to jest trochę łatwiejsze, ale nie sądzę, że jest to naprawdę właściwy sposób. Może się mylę. – clifgray

+0

jest tam jak switch, gdzie jak gdyby przymiotnik == entertaing: // kod druk lub przełączyć case 1 jeśli przymiotnik == rozrywkowych: // wykonać przypadek 2 jeśli przymiotnik == informacyjny: // wykonaj – ELHippie

+0

Python nie ma instrukcji switch. Zwykle alternatywą jest użycie słownika. Obawiam się jednak, że tak naprawdę nie rozumiem twojego sugerowanego kodu (może to pomóc w umieszczeniu go w odpowiedzi, gdzie możesz go poprawnie sformatować). – Blckknght