我正在生成一个返回多行的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
答案 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
属性。