使用Flask中的request.form.getlist,我只获取列表的最后一个值。 这里下面是.py代码和html相关的。 如果我抑制以下三行,那么我得到完整列表,但这样做我错过了html表行的标题。
<form action="{{ url_for('show_entries')}}" method=get>
<td width="50"><font size="2">{{ L }}</font></td>
</form>
我该怎么办?谢谢你的提示!
from flask import Flask, render_template, request, url_for
app = Flask(__name__)
data = [
('t', 0, 'a'),
('t', 0, 'b'),
('t', 0, 'c'),
('t', 0, 'd')
]
@app.route('/', methods=['GET', 'POST'])
def show_entries():
entries=[]
for (i,v) in enumerate(data):
entries.append(data[i][2])
return render_template('layout2.html', entries=entries)
@app.route('/get', methods=['GET', 'POST'])
def get_entries():
cl1=[]
cl1=request.form.getlist('cn')
return render_template('test2.html', cl1=cl1)
if __name__ == "__main__":
app.debug = True
app.run()
layout2.html文件是:
<!DOCTYPE HTML>
<table>
{% for L in entries %}
<tr>
<form action="{{ url_for('show_entries')}}" method=get>
<td width="50"><font size="2">{{ L }}</font></td>
</form>
<form action="{{ url_for('get_entries')}}" method=post>
<td width=100 align=center><input type=text name=cn size=3 value=0.0></td>
</tr>
{% if loop.last==True %}
</table>
<br>
<div ALIGN=left>
<input type=submit value=Submit>
</form>
</div>
{% endif %}
{% endfor %}
test2.html是:
<!DOCTYPE HTML>
<div ALIGN="center">
<td width="50"><font size="2" face="verdana" color="red">OUTPUT=</font></td>
<form action="{{ url_for('get_entries')}}" method=get></form>
<td width="50"><font size="2" face="verdana" color="red">{{ cl1 }}</font></td>
</div>
答案 0 :(得分:3)
<tr>
元素可以拥有的唯一直接后代是<td>
和<th>
元素。你不能拥有<form>
元素。
将<form>
标记放在<td>
内,它应该有效:
<td width="50">
<form action="{{ url_for('show_entries')}}" method=get>
<font size="2">{{ L }}</font>
</form>
</td>
此外,您的HTML已过时:
不推荐使用<font>
代码。
同样,align
属性也已弃用。
使用CSS设置样式。
答案 1 :(得分:2)
您正在打开多个form
元素但只关闭其中一个元素 - 这可能导致浏览器仅通过 last 形式发送 - 因此只发送一个值。将form
换成整个表格(并删除嵌套表格),getlist
就可以了。