2017-08-09 42 views
3

我想從HTML表單獲取輸入並以JSON格式輸出結果。選擇多個值時,它們不會轉換爲JSON數組,只會使用第一個值。將Flask表單數據轉換爲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 }} 

當所有者多個值被選擇時, 「雷神」 和 「閃光」 時,輸出僅示出一個值:

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

我希望業主是一個列表:

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

如何顯示形式爲JSON不失列表值?

回答

2

request.formMultiDict。遍歷multidict只會返回每個鍵的第一個值。要獲取字典將會列出值,請使用to_dict

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

爲保持一致性,所有值都將是列表,即使只有一個項目也是如此。如果要平展單值項目,則需要手動處理數據。使用iterlists與dict理解。

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