pythonhtmlcheckbox

How to process multiple checkboxes with a single server-side variable? (HTML form; python)


I have the following HTML code:

<form method="post">
              <h5>Sports you play:</h5>
                <input type="checkbox" name="sports_played" value="basketball"> basketball<br>
                <input type="checkbox" name="sports_played" value="football"> football<br>
                <input type="checkbox" name="sports_played" value="baseball"> baseball<br>
                <input type="checkbox" name="sports_played" value="soccer"> tennis<br>
                <input type="checkbox" name="sports_played" value="mma"> MMA<br>
                <input type="checkbox" name="sports_played" value="hockey"> hockey<br>
                
                <br> 

                    <input class="btn" type="submit">

</form>

And then ideally I would like to have the following python server-side code:

class MyHandler(ParentHandler):
    def post(self):
        sports_played = self.request.get('sports_played')
        # sports_played is a list or array of all the selected checkboxes that I can iterate through

I tried doing this by making the HTML sports_played name and array, sports_played[], but that didn't do anything -- it just returns the first selected item.

Is this possible? Really I just don't want to have to do a self.request.get('HTML_item') for every checkbox. I don't want to have to change the Python code if I alter the HTML.


Solution

  • The answer is shown in the webapp2 docs for the request object:

    self.request.get('sports_played', allow_multiple=True)
    

    Alternatively you can use

    self.request.POST.getall('sports_played')