Yado_tech

旅館+ITとはなんぞ

formタグ内のinput要素をリストで受け取る。

formに複数の送信ボタン - 徒書

nekoyukimmm.hatenablog.com

より
formタグのname要素は複数あっても問題なく、また、同一のname要素だとflaskではリストで受け取ることが出来る。これほんと便利。

てことでソース

from flask import Flask,render_template,url_for,request,redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return render_template('test.html')

@app.route('/posttest',methods = ['POST'])
def posttest():
    print(request.form.getlist('num'))
    print(request.form['action'])
    return redirect(url_for('hello'))


if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html>
<head>
  <meta charset = "utf-8" />
  <title>フォームテスト</title>
</head>

<form action = {{url_for('posttest')}} method = "POST">
  <input type = 'text' name = "num" />
  <input type = 'text' name = "num" />
  <input type = 'text' name = "num" />
  <input type = 'text' name = "num" />
  <input type = 'text' name = "num" />

  <button type = "submit" name = "action" value = 'submit1'>submit</button>
  <button type = "submit" name = "action" value = 'submit2'>submit2</button>

</form>
</html>

python部分のrequest.form.getlist(【name要素】)の部分でHTMLテンプレート部分のFormタグの同一要素をリストで受け取ることが出来る。

ちなみにボタンも2つ付けてみたが、これ実はbuttonタグのvalue要素もPOSTされてるのでname要素を同一にしておけばvalue要素も受け取ることが可能。 ボタンによって処理を分けたいときはこれでOK

どっちもわかるとすごく書かなきゃいけないコードの量が減ると思うので、便利。