1

Flask で request.form.getlist を使用すると、リストの最後の値のみを取得します。以下に .py コードと html 関連を示します。次の 3 行を非表示にすると、完全なリストが表示されますが、そうすると、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ますが、そのうちの 1 つだけを閉じています。これはおそらく、ブラウザが最後のフォームのみを送信する原因となっているため、送信される値は 1 つだけです。代わりにテーブル全体をラップformして(ネストされたフォームを削除して)、機能しgetlistます。

于 2013-01-06T03:40:39.490 に答える