Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将值从下拉菜单传递到烧瓶模板_Python_Html_Sqlite_Flask - Fatal编程技术网

Python 将值从下拉菜单传递到烧瓶模板

Python 将值从下拉菜单传递到烧瓶模板,python,html,sqlite,flask,Python,Html,Sqlite,Flask,我在将从HTML下拉菜单中选择的项目传递到SQL查询时遇到问题 我不确定我的代码中缺少了什么概念来实现这一点。我发现的大多数示例都是PHP,我不知道如何将其转换为Python 下面是一个场景。我正在使用Flask和Sqlite,并试图让用户从HTML下拉菜单中选择一项。从下拉菜单中选择的项目将在SQL查询中用于从数据库检索信息,然后在新页面上显示这些结果 例如,用户从具有3个选项(红色、蓝色、绿色)的下拉列表中选择“红色”,然后单击提交按钮。“Red”将传递给my app.py文件中的SQL查询

我在将从HTML下拉菜单中选择的项目传递到SQL查询时遇到问题

我不确定我的代码中缺少了什么概念来实现这一点。我发现的大多数示例都是PHP,我不知道如何将其转换为Python

下面是一个场景。我正在使用Flask和Sqlite,并试图让用户从HTML下拉菜单中选择一项。从下拉菜单中选择的项目将在SQL查询中用于从数据库检索信息,然后在新页面上显示这些结果

例如,用户从具有3个选项(红色、蓝色、绿色)的下拉列表中选择“红色”,然后单击提交按钮。“Red”将传递给my app.py文件中的SQL查询,该查询将从color=“Red”所在的行中检索所有数据。然后,检索到的数据将显示在/results.html上

我认为我的问题是,我没有正确地将值赋给下拉菜单中的项,然后将该值传递给运行SQL查询的Python代码。这是我关于这应该如何工作的假设,但我可能遗漏了更大的东西

我尝试了大量的HTML来实现这一点,但我甚至不确定这就是我的问题所在。当我点击“提交”时,我将进入新页面,但数据库中没有显示任何内容

% 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个视图(“/”&“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 %}
%扩展了“template.html”%}
{%block content%}
结果
{%p在posts%}
项目:{{p.Item}
名称:{{p.Name}
{%endfor%}
{%endblock%}

您需要将您的
选择
放入
表单中

<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>

正如@dim所提到的,将select放在表单中的a中,可以使用
request.form['Item\u 1']
获得所选的值。但是,查询的项目是select,因此我更喜欢使用get而不是POST。在wiki中,当

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. POST request方法旨在请求web服务器接受请求消息正文中包含的数据进行存储。[1]在上载文件或提交完整的web表单时经常使用该方法。
所以我更喜欢GET,它可以用来查询数据库。使用GET时,可以将项_1作为请求参数传递,并在我的表单中使用

获取。对于action=,我是否将所选值传递到希望最终显示结果的页面(/results.html)或传递到将使用所选值(app.py)处理SQL查询的python脚本?
操作
属性应与URL匹配。我已经更新了我的答案,向您展示了如何使用的
url\u来填充值。