Python Flask - 从具有多个文本框的表单接收数据

时间:2014-07-17 15:14:35

标签: python flask

我正在生成一个返回多行的SQL查询的网页。我将它们显示在html表中,其中1列是文本框。我通过每个新行的sql结果循环,文本框字段最终都具有相同的名称。

单击提交按钮时,我只收到第一个文本框中的一个值。

这是HTML im使用

<form action="/commit_changes" method=post>
    <ul class=naming>
  <h2>{{ Overview }}</h2>
    {% for entry in sensor_names %}
        <li>{{ entry.sensor_add|safe }}
        <input type="text" name="sensor_name" value={{ entry.sensor_name|safe }}>
        <input type="checkbox" name="del" value="del">
        <li> <br> </li>
    {% endfor %}
</ul>

<input type="submit" name="submit" value="Commit Changes">
</form>

这是烧瓶中的python代码:

@app.route('/commit_changes', methods=['GET', 'POST'])
def commit_changes():
    print(request.form['sensor_name'])
    return redirect('settings')

我猜测将数据发送回python的唯一方法是在文本框中循环并一次发送一个javascript。这是我卡住的地方:),希望有人可以指出我正确的方向。 CD

2 个答案:

答案 0 :(得分:2)

您必须为name文本字段指定唯一的input属性。

<form action="/commit_changes" method=post>
        <ul class=naming>
      <h2>{{ Overview }}</h2>
        {% for entry in sensor_names %}
            <li>{{ entry.sensor_add|safe }}
            <input type="text" name="sensor_name{{entry.id}}" value={{ entry.sensor_name|safe }}>
            <input type="checkbox" name="del" value="del">
            <li> <br> </li>
        {% endfor %}
    </ul>

    <input type="submit" name="submit" value="Commit Changes">
    </form>

如果您没有id对象列表的sensor_names属性,则可以尝试sensor_name{{forloop.counter}}而不是sensor_name{{entry.id}}

答案 1 :(得分:0)

request.form 实际上是一个自定义的“multi”dict 对象,由 Werkzeug 提供。它会有一个自定义的 request.form.getlist('sensor_name') 字段,或者您可以使用 request.form.items(multi=True) 进行迭代。

没有必要使用唯一的 name 属性。