1

使用 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>
4

2 回答 2

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 设置样式。

于 2013-01-05T14:14:11.477 回答
2

您正在打开多个form元素但只关闭其中一个 - 这可能导致浏览器只发送最后一个表单 - 因此只发送一个值。form而是将您的整个表格包裹起来(并删除嵌套表格)并且getlist可以使用。

于 2013-01-06T03:40:39.490 回答