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

Ale*_*lex 10 html python sqlite flask

我在将从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)
Run Code Online (Sandbox Code Playgroud)

这是下拉菜单存在的视图

<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>
Run Code Online (Sandbox Code Playgroud)

这是视图,其中应显示选择"红色"的结果

% extends "template.html" %}
{% block content %}
<h2>Results</h2>

{% for p in posts %}
    <strong>Item:</strong> {{ p.item }}
    <strong>Name:</strong> {{ p.name}}  
{% endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

dir*_*irn 8

你需要把你的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>
Run Code Online (Sandbox Code Playgroud)

一个更好的方式来宣布form将是

<form name="Item_1" action="{{ url_for('results') }}" method="POST">
Run Code Online (Sandbox Code Playgroud)