将Flask表单数据转换为JSON只获取第一个值

2024-05-15 04:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从HTML表单中获取输入并以JSON格式给出输出。当选择多个值时,它们不会转换为JSON数组,只使用第一个值。

@app.route('/form')
def show_form():
    return render_template('form.html')

@app.route("/result", methods=['POST'])
def show_result():
    result = request.form
    return render_template('result.html', result=result)

form.html

<form method=POST>
   <input name=server>
   <select name=owners multiple>
       <option value="thor">thor</option>
       <option value="loki">loki</option>
       <option value="flash">flash</option>
       <option value="batman">batman</option>
   </select>
   <input type=submit>
</form>

result.html

{{ result|tojson }}

当为owner选择了多个值“thor”和“flash”时,输出仅显示一个值:

{"server": "app-srv", "owners": "thor"}

我希望业主是一个名单:

{"server": "app-srv", "owners": ["thor", "flash"]}

如何将表单显示为JSON而不丢失列表值?


Tags: formjsonapp表单servervaluedefhtml
1条回答
网友
1楼 · 发布于 2024-05-15 04:54:52

request.form是一个^{}。在multidict上迭代只返回每个键的第一个值。要获取包含值列表的字典,请使用^{}

result = request.form.to_dict(flat=False)

为了保持一致性,所有值都将是列表,即使只有一个项。如果要展平单值项,则需要手动处理数据。在听写理解中使用^{}

result = {
    key: value[0] if len(value) == 1 else value
    for key, value in request.form.iterlists()
}

相关问题 更多 >

    热门问题