42

我在 html 文件中有一个多选,如下所示:

<select multiple id="mymultiselect" name="mymultiselect">         
        <option value="1">this</option>       
        <option value="2">that</option>       
        <option value="3">other thing</option>
</select>

当我通过以下方式访问 flask/python 中的 mymultiselect 字段时:

request.form['mymultiselect']

或者通过使用 request.args.get 函数它只返回一个选定的项目。我了解到,要获取所有选定的项目,我必须将 [] 添加到字段名称中,如下所示:

<select multiple id="mymultiselect" name="mymultiselect[]">       
        <option value="1">this</option>       
        <option value="2">that</option>       
        <option value="3">other thing</option>
</select>

我可以通过在 firebug 中查看 post 数据看到这是有效的,但是我任何时候尝试在 flask/python 中访问该字段时,它都会返回为 null 或 None。

您如何访问这些名称末尾带有“[]”的多选表单字段?我也尝试将“[]”附加到 python 代码中的字段名称,但这似乎不起作用。

4

3 回答 3

83

您想使用该getlist()函数来获取值列表:

multiselect = request.form.getlist('mymultiselect')

无需添加[]名称即可完成此操作;事实上,它[]并没有帮助,根本不要使用它。

于 2012-09-19T20:49:13.827 回答
4

在此处输入图像描述> 有时,如果您使用 Ajax POST 方法,请检查网络选项卡中的参数名称。检查描述如何验证参数名称的附加图像。

在 Flask 视图中:

您可以根据参数名称访问列表响应。

request.form.getlist('mymultiselect[]')

或者

request.form.getlist('mymultiselect')
于 2020-04-16T15:39:43.810 回答
0

您可以创建一个函数来获取值作为字典

def __get_form_data(self, method='POST', compare_with=dict()):
    # Get form MiniFieldStorage items
    form = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={ 'REQUEST_METHOD' : method })
    # Convert to dictionary
    return { key.rstrip('[]'):form.getlist(key) if key.endswith('[]') else form.getvalue(key) for key in form.keys() if compare_with.get(key)!=form.getvalue(key) }
于 2020-02-10T11:06:29.280 回答