我在将从HTML下拉菜单中选择的项传递到SQL查询时遇到问题。
我不确定我的代码中缺少什么概念来实现这一点。我发现的大多数例子都是用PHP编写的,我不知道如何将其转换成Python。
这是场景。我正在使用Flask和Sqlite,并试图让用户从HTML下拉菜单中选择一个项目。从下拉菜单中选择的项将在SQL查询中用于从数据库检索信息,然后在新页面上显示这些结果。
例如,用户从具有3个选项(红色、蓝色、绿色)的下拉列表中选择“红色”,然后单击提交按钮“Red”将传递给app.py文件中的一个SQL查询,该查询将从color=“Red”所在的行中检索所有数据。检索到的数据将显示在/results.html上。
我认为我的问题是,我没有正确地将一个值赋给下拉菜单中的项,然后将该值传递给运行SQL查询的Python代码。这是我的假设,但我可能会错过一些更大的东西。
我已经尝试了很多HTML来实现这一点,但我甚至不确定这就是我的问题所在。当我点击“提交”时,我将进入新页面,但数据库中没有显示任何内容
这是我的代码,用于我的两个视图('/'&;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 %}
你需要把你的
select
放在form
里面。声明
form
的更好方法是正如@dim所提到的,将select放在表单中,可以使用
request.form['Item_1']
获得所选的值。但是,查询的项目是一个select,所以我更喜欢使用get而不是POST。在wiki中,http://en.wikipedia.org/wiki/POST_(HTTP),POST用于所以我更喜欢GET,它可以用来查询数据库。使用GET时,项1可以作为请求参数传递,并使用flask.request.args获取
相关问题 更多 >
编程相关推荐