将值从下拉菜单传递到Flask温度

2024-06-17 08:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 代码name视图dbsqlhtmlredresults
2条回答

你需要把你的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所提到的,将select放在表单中,可以使用request.form['Item_1']获得所选的值。但是,查询的项目是一个select,所以我更喜欢使用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时,项1可以作为请求参数传递,并使用flask.request.args获取

相关问题 更多 >