Handle Multiple Checkboxes with a Single Serverside Variable

拟墨画扇 提交于 2021-02-07 19:43:59

问题


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 serverside 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 and right now it just always 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 each and every checkbox incase I need to alter the HTML I don't want to have to change the python.

Thanks!


回答1:


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



回答2:


The name of the inputs should have [] at the end so that they are set to the server as an array. Right now, your multiple checkboxes are being sent to the server as many variables with the same name, so only one is recognized. It should look like this:

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

Now, if you select more than one, the values will be sent as an array.



来源:https://stackoverflow.com/questions/18745456/handle-multiple-checkboxes-with-a-single-serverside-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!