我在将从HTML下拉菜单中选择的项目传递给SQL查询时遇到问题。
我不确定我的代码中缺少什么概念才能使其工作。我发现的大多数示例都是在PHP中,我不知道如何将其转换为Python。
以下是该方案。我正在使用Flask和Sqlite,并尝试让用户从HTML下拉菜单中选择一个项目。从下拉菜单中选择的项目将用于SQL查询,以从数据库中检索信息,然后在新页面上显示这些结果。
例如,用户选择" Red"从下拉列表中有3个选项(红色,蓝色,绿色)并单击提交按钮。 "红色"将传递给我的app.py文件中的SQL查询,该查询将从color =" Red"的行中检索所有数据。然后,检索到的数据将显示在/results.html上。
我认为我的问题是我没有正确地将值归因于我的下拉菜单中的项目,然后将该值传递给运行SQL查询的Python代码。这是我应该如何运作的假设,但我可能会错过这里更大的东西。
我已经尝试了很多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>
以下是选择&#34; Red&#34;的结果。应该显示
% extends "template.html" %}
{% block content %}
<h2>Results</h2>
{% for p in posts %}
<strong>Item:</strong> {{ p.item }}
<strong>Name:</strong> {{ p.name}}
{% endfor %}
{% endblock %}
答案 0 :(得分:7)
您需要将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">
答案 1 :(得分:0)
正如@dim所提到的那样,将select放在表单中,并且可以使用request.form['Item_1']
获取所选的值。但是,被查询的项目是一个选择,所以我更喜欢使用get而不是POST。从wiki http://en.wikipedia.org/wiki/POST_(HTTP)开始,在
The POST request method is designed to request that a web server accept the data enclosed in the request message's body for storage.[1] It is often used when uploading a file or submitting a completed web form.
所以我更喜欢GET,它可用于查询数据库。使用GET时,Item_1可以作为请求参数传递,并使用flask.request.args