【发布时间】:2014-06-26 17:57:09
【问题描述】:
我在将一个从 HTML 下拉菜单中选择的项目传递给 SQL 查询时遇到问题。
我不确定我的代码中缺少什么概念来完成这项工作。我发现的大多数示例都是用 PHP 编写的,我不知道如何将其转换为 Python。
这里是场景。我正在使用 Flask 和 Sqlite,并尝试让用户从 HTML 下拉菜单中选择一个项目。从下拉菜单中选择的项目将在 SQL 查询中用于从数据库中检索信息,然后在新页面上显示这些结果。
例如,用户从具有 3 个选项(红色、蓝色、绿色)的下拉菜单中选择“红色”,然后单击提交按钮。 “Red”将传递给我的 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>
这是应显示选择“红色”的结果的视图
% extends "template.html" %}
{% block content %}
<h2>Results</h2>
{% for p in posts %}
<strong>Item:</strong> {{ p.item }}
<strong>Name:</strong> {{ p.name}}
{% endfor %}
{% endblock %}
【问题讨论】: