将值从下拉菜单传递到Flask模板

时间:2014-05-09 05:14:28

标签: python html sqlite flask

我在将从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 %}

2 个答案:

答案 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)开始,在

时使用POST
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