web-dev-qa-db-ja.com

flaskを使用してselectタグから値を取得する

Flaskが初めてで、選択タグから値を取得するのに問題があります。悪いリクエストを返す_request.form['comp_select']_を試しました。しかし、request.form.get('comp_select')、戻りページは空のリスト「[]」を返します。

私のhtml:

_<form class="form-inline" action="{{ url_for('test') }}">
  <div class="form-group">
    <div class="input-group">
        <span class="input-group-addon">Please select</span>
            <select name="comp_select" class="selectpicker form-control">
              {% for o in data %}
              <option value="{{ o.name }}">{{ o.name }}</option>
              {% endfor %}                                              
            </select>
    </div>
    <button type="submit" class="btn btn-default">Go</button>
  </div>
</form>
_

私のapp.py:

_@app.route("/test" , methods=['GET', 'POST'])
def test():
    select = request.form.get('comp_select')
    return(str(select)) # just to see what select is
_

投稿の書式設定がオフの場合は事前に申し訳ありません(これもStack Overflowの新機能です)。

27
qwertyuip9

あなたが提供したものから確実に知ることは難しいですが、あなたは_method="POST"_を_<form>_要素に追加する必要があると思います。

requestオブジェクトのフラスコドキュメント から:

フォームデータ(POSTまたはPUT要求で送信されるデータ)にアクセスするには、form属性を使用できます。.. URL(?key = value)で送信されたパラメーターにアクセスするには、 args属性。

したがって、POSTを使用してフォームを送信する場合は、request.form.get()を使用します。 GETでフォームを送信する場合は、request.args.get()を使用します。

このアプリの動作は次のとおりです。

flask_app.py:

_#!/usr/bin/env python
from flask import Flask, flash, redirect, render_template, \
     request, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return render_template(
        'index.html',
        data=[{'name':'red'}, {'name':'green'}, {'name':'blue'}])

@app.route("/test" , methods=['GET', 'POST'])
def test():
    select = request.form.get('comp_select')
    return(str(select)) # just to see what select is

if __name__=='__main__':
    app.run(debug=True)
_

templates/index.html

_<form class="form-inline" method="POST" action="{{ url_for('test') }}">
  <div class="form-group">
    <div class="input-group">
        <span class="input-group-addon">Please select</span>
            <select name="comp_select" class="selectpicker form-control">
              {% for o in data %}
              <option value="{{ o.name }}">{{ o.name }}</option>
              {% endfor %}
            </select>
    </div>
    <button type="submit" class="btn btn-default">Go</button>
  </div>
</form>
_
28
Robᵩ