Подтвердить что ты не робот

Получение значения из тега select с использованием колбы

Я новичок в Flask, и у меня возникли проблемы с получением значения из моего тега select. Я пробовал 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

Извините, если мое форматирование отключено для сообщения (также новое для).

4b9b3361

Ответ 1

Трудно знать наверняка из того, что вы предоставили, но я считаю, что вам нужно добавить method="POST" к вашему элементу <form>.

В файле флагов для объекта request:

Чтобы получить доступ к данным формы (данные, переданные в запросе POST или PUT), вы можете использовать атрибут формы.... Для доступа к параметрам, представленным в 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)

Шаблоны/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>