Передача значения из выпадающего меню в шаблон фляги

У меня возникла проблема с передачей элемента, выбранного из выпадающего меню HTML, в SQL-запрос.

Я не совсем уверен, какая концепция отсутствует в моем коде, чтобы сделать эту работу. Большинство примеров, которые я нашел, находятся в PHP, и я не уверен, как перевести его на Python.

Вот сценарий. Я использую Flask и Sqlite и пытаюсь позволить пользователю выбрать элемент из выпадающего меню HTML. Элемент, выбранный из выпадающего меню, будет использоваться в запросе SQL для извлечения информации из базы данных и последующего отображения этих результатов на новой странице.

Например, пользователь выбирает «Красный» из раскрывающегося списка, который имеет 3 варианта (красный, синий, зеленый) и нажимает кнопку отправки. «Красный» будет передан SQL-запросу в моем файле app.py, который будет извлекать все данные из строк, где color = «Red». Затем полученные данные будут отображаться на /results.html.

Я считаю, что моя проблема заключается в том, что я неправильно присваиваю значение элементам в раскрывающемся меню, а затем передаю это значение моему коду Python, на котором выполняется SQL-запрос. Это мое предположение о том, как это должно работать, но, возможно, мне здесь не хватает чего-то большего.

Я пробовал много бит HTML, чтобы сделать эту работу, но я даже не уверен, что это моя проблема. Когда я нажимаю «Отправить», я беру новую страницу, но ничего из базы данных не отображается

Вот мой код для моих 2 просмотров ('/' & 'results.html') и моего кода на Python:

@app.route('/results.html', methods=['GET','POST']) def results(): g.db = connect_db() cur = g.db.execute("SELECT * FROM all_items WHERE name = '{}'".format('Red')) posts = [dict(item=row[0], name=row[1]) for row in cur.fetchall()] g.db.close() return render_template('results.html', posts=posts) 

Вот вид, где расположены выпадающие меню

 <select name="Item_1"> <option value="Red">Red</option> <option value="Green">Green</option> </select> <form name="Item_1" action="results.html" method='POST'> <button type="submit">Compare!</button> </form> 

Вот вид, в котором должны отображаться результаты выбора «Красный»

 % extends "template.html" %} {% block content %} <h2>Results</h2> {% for p in posts %} <strong>Item:</strong> {{ p.item }} <strong>Name:</strong> {{ p.name}} {% endfor %} {% endblock %} 

2 Solutions collect form web for “Передача значения из выпадающего меню в шаблон фляги”

Вы должны поместить свой select внутри form .

 <form name="Item_1" action="results.html" method='POST'> <select name="Item_1"> <option value="Red">Red</option> <option value="Green">Green</option> </select> <button type="submit">Compare!</button> </form> 

Еще лучший способ объявить form

 <form name="Item_1" action="{{ url_for('results') }}" method="POST"> 

Как уже упоминалось, @dim помещает выбор внутри формы, и выбранное значение может быть request.form['Item_1'] с использованием request.form['Item_1'] . Однако запрашиваемый элемент – это выбор, поэтому я бы предпочел использовать get вместо POST. Из wiki, http://en.wikipedia.org/wiki/POST_(HTTP) , POST используется, когда

 Метод запроса POST предназначен для запроса, чтобы веб-сервер принимал данные, заключенные в тело сообщения запроса для хранения. [1]  Он часто используется при загрузке файла или отправке заполненной веб-формы.

Поэтому я предпочитаю GET, который можно использовать для запроса базы данных. При использовании GET Item_1 может быть передан как параметры запроса и получен с использованием flask.request.args

  • Невозможно импортировать SQLite с Python 2.6
  • Невозможно использовать замену параметра sqlite3 с помощью PRAGMA?
  • Как удалить таблицу в SQLAlchemy?
  • Импорт данных Sqlite в Google App Engine
  • Передача данных JSON на передний план с использованием Django
  • Чтение SQLite всегда попадает на диск?
  • Как я могу получить dict из запроса sqlite?
  • Python - mysqlDB, результат sqlite в качестве словаря
  •  
    Interesting Posts for Van-Lav

    Есть ли идиома Python для оценки списка функций / выражений с коротким замыканием?

    Кэш фляг, эквивалент delete_memoized для очистки

    В чем преимущество частного имени в Python?

    Django (& Pinax): Отслеживание «AppRegistryNotReady: приложения еще не загружены». Исключение

    Как я могу разобрать выделенный текст для дальнейшей обработки?

    Подавление научной нотации в пандах?

    Как сохранить тестовые данные после завершения тестов Django?

    Почему pandas.DataFrame.apply печатает хлам?

    Как запросить вывод узлового напряжения в скрипте ABAQUS Python

    как установить более раннюю версию django с помощью easy_install?

    Получить дату создания файла – добавить в колонку dataframes по read_csv

    Как преобразовать csv в словарь в потоке данных apache

    Как переопределить метод создания по умолчанию в django-rest-framework

    Почему эта переменная класса одинакова для разных экземпляров?

    Почему я не могу мариновать typing.NamedTuple, в то время как я могу разжечь коллекцию.namedtuple?

    Python - лучший язык программирования в мире.