Flask下拉选择表单无法传递含多单词的完整选项值
解决下拉选项含空格时请求值不完整的问题
这个问题我太熟悉了!你遇到的情况是因为HTML里的value属性没有用引号包裹,浏览器解析的时候会把空格当成属性的分隔符,导致只传递了第一个单词。
问题根源
看你这段代码:
<select name="joincolumn1" form ="form1" required> {% for option in options['tempTable'] %} <option value = {{option}}>{{option}}</option> {% endfor%} </select>
当option的值是host name时,渲染后的HTML会变成:
<option value = host name>host name</option>
浏览器会把value解析为host,后面的name被当成了一个独立的无效属性,所以后端执行print(request.args['joincolumn1'])只能拿到host。
修复方案
给value属性加上双引号(单引号也可以),确保属性值被完整包裹:
<select name="joincolumn1" form="form1" required> {% for option in options['tempTable'] %} <option value="{{option}}">{{option}}</option> {% endfor%} </select>
这样渲染后,带空格的选项会变成:
<option value="host name">host name</option>
浏览器就能正确识别完整的value值,后端也能拿到完整的host name了。
额外验证小技巧
提交表单后,可以打开浏览器的开发者工具(F12),切换到网络标签,查看对应的请求,在Form Data里就能看到joincolumn1的参数值是否完整,方便快速排查这类问题。
内容的提问来源于stack exchange,提问作者Josh Sharkey
相关产品推荐
相关产品推荐

