Python 烧瓶-获取值

Python 烧瓶-获取值,python,html,flask,request,url-for,Python,Html,Flask,Request,Url For,我想从用户在搜索框中键入的内容中获取“name”和“size”值 但明显的问题是,我试图从方法:“POST”hmtl表单中获取值。 我的html操作只引用了{url\u for('main')}}html,而不是要在{url\u for('search')}html中检索这些值的地方 以下是模板: import sqlite3 from flask import Flask,render_template, url_for, redirect, request app = Flask(__n

我想从用户在搜索框中键入的内容中获取“name”和“size”值

但明显的问题是,我试图从
方法:“POST”
hmtl表单中获取值。 我的html操作只引用了
{url\u for('main')}}
html,而不是要在{url\u for('search')}html中检索这些值的地方

以下是模板:

import sqlite3
from flask import Flask,render_template, url_for, redirect, request


app = Flask(__name__)
conn = sqlite3.connect('shoes.db', check_same_thread=False)
c = conn.cursor()

@app.route("/", methods=["GET", "POST"])
def main():

    if request.method == 'GET':
        return render_template('main.html')

    elif request.method == 'POST':
        name = request.form.get('name')
        size = request.form.get('size')
        return redirect(url_for('search'))


@app.route("/search/", methods=["GET", "POST"])
def search():

    # Need to get the 'name' and 'search' values from input, so this way is incorrect.
    name = request.args.get("name") 
    size = request.args.get("size")     

    c.execute("SELECT * FROM shoes WHERE name LIKE ? AND sizes LIKE ? ORDER BY price",
                    ('%'+name+'%','%'+size+'%'))

    p = c.fetchall()

    url = [p[i][0] for i in range(len(p))]
    names = [p[i][1] for i in range(len(p))]
    prices = [p[i][2] for i in range(len(p))]
    sizes = [p[i][3] for i in range(len(p))]
    shoe_type = [p[i][4] for i in range(len(p))]

    return render_template('search.html' , url=url, names=names, prices=prices,
                           sizes=sizes, shoe_type=shoe_type)


if __name__ == '__main__':
    app.run(debug=True)
main.html:

{% extends "layout.html" %}
{% block content %}

<form action = "{{ url_for('main') }}" class="form" method = "POST" >

        <h1>Soccer Shoes Finder</h1>
        <div class="line-separator"></div>

            <div class="container-fluid">
                <input name = "name" type="text" placeholder="Name"/>
                <input name = "size" type="text" placeholder="Size"/>
                <button class="glyphicon glyphicon-search" aria-hidden="true"></button>
            </div>

</form>

{% endblock %}
{%extends“layout.html”%}
{%block content%}
足球鞋搜寻器
{%endblock%}
search.html:

{% extends "layout.html" %}
{% block content %}


    <div class= "container">
    <h2>Results:</h2>
    <table class="table table-striped">
    <thead>
    <tr>
        <th>url</th>
        <th>Name</th>
        <th>Prices</th>
        <th>Sizes</th>
        <th>Shoe Type</th>
    </tr>
    </thead>
    <tbody>
    {% for i in range(url|length) %}
    <tr>
        <td><a href={{url[i]}}>aa</td>
        <td>{{names[i]}}</td>
        <td>${{prices[i]}}</td>
        <td>{{sizes[i]}}</td>
        <td>{{shoe_type[i]}}</td>
    </tr>
    {% endfor %}
    </tbody>
    </table>
    </div>
{% endblock %}
{%extends“layout.html”%}
{%block content%}
结果:
网址
名称
价格
尺寸
鞋型
{范围(url |长度)%}
aa
{{names[i]}
${{prices[i]}
{{size[i]}
{{shoe_type[i]}
{%endfor%}
{%endblock%}

有人知道我怎样才能做到这一点吗?希望我说的有道理。谢谢。

简化您的主要路线,似乎没有理由在此处发布数据:

@app.route("/")
def main():
    return render_template('main.html')
POST
通过在main.htmlJinja模板中更改此行,将数据直接发布到您的搜索端点:

<form action="{{ url_for('search') }}" class="form" method="POST">

假设您的数据库代码正常工作,其余部分应按预期工作

谢谢。这很有效。可能是一个愚蠢的问题,但如果我删除了main.html中的
重定向
,它如何知道在单击搜索按钮时重定向到哪里?form
action
属性告诉main.html页面将表单直接提交到您的/search/function,我明白了。
@app.route("/search/", methods=["POST"])
def search():
    name = request.form.get("name") 
    size = request.form.get("size")