将复选框值发送到烧瓶

时间:2019-03-03 19:16:33

标签: python html flask

我有一个看起来像这样的表格:

<form id="settings" action="{{ url_for("load_settings") }}" method="post">
... 

    <label for="m_r">Interval 1</label>
    <input type="text" name="morn_r" id="m_r">

    <label for="d1_e">Enabled</label>
    <input type="checkbox" name="d_enabled" id="d1_e" value="off" onclick="toggle_check(this)">
</form>

这是toggle_check函数:

function toggle_check(check) {
      if (check.value=="on") {
        check.value="off";
      }
      else {
        check.value="on";
      }
    }

这是我的Python:

@app.route("/settings", methods=["POST", "GET"])
def load_settings():
    if request.method == "POST":
        settings = list(request.form.values())
        print(settings)
    return render_template("settings.html")

如果我将文本输入留空但单击复选框,则将打印以下内容:[..., '', 'on']

现在,如果我也将复选框保留为空,则将打印以下内容:[..., '']。由于某些原因,它不会添加复选框的值...

我不知道该如何解决。有人可以帮忙吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

this answer开始,HTML 4 recommendation from W3C声明:

  

复选框(和单选按钮)是可以由用户切换的开/关开关。设置控制元素的选中属性时,开关为“ on”。提交表单后,只有“启用”复选框控件才能成功。

因此,与Flask无关的是,为什么未选中时复选框值不存在。取消选中该复选框时,浏览器不会将该表单输入序列化到请求中。

您可以做的是在模板中给输入一些合理的值:

<input type="checkbox" name="d_enabled" value="on">

然后在Flask处理程序中检查值的存在:

if request.form.get('d_enabled') == 'on':
    # checkbox is checked
else:
    # checkbox is not checked