Python Can';提交搜索表单后,使用Flask app从url检索变量

Python Can';提交搜索表单后,使用Flask app从url检索变量,python,forms,flask,Python,Forms,Flask,我想在用户提交搜索表单后提供一个新视图。我用与其他视图相同的方法创建了它,但不幸的是这次没有发生任何事情,我无法从应用程序路径检索内容。(所以这个问题不是问题的重复,这个问题只发生在提交表单之后,在其他任何情况下都能完美地工作。)我在表单中写入一些内容,提交它,然后url在浏览器中更改,但视图无论如何都不会更改。我几乎可以肯定这是因为搜索slug中的?和=,但不知道在Python代码中应该如何处理它们 实际上,当我提交表单时,我的浏览器会将我重定向到如下url: http://domain/.c

我想在用户提交搜索表单后提供一个新视图。我用与其他视图相同的方法创建了它,但不幸的是这次没有发生任何事情,我无法从应用程序路径检索内容。(所以这个问题不是问题的重复,这个问题只发生在提交表单之后,在其他任何情况下都能完美地工作。)我在表单中写入一些内容,提交它,然后url在浏览器中更改,但视图无论如何都不会更改。我几乎可以肯定这是因为搜索slug中的
=
,但不知道在Python代码中应该如何处理它们

实际上,当我提交表单时,我的浏览器会将我重定向到如下url:

http://domain/.com/?search=content+from+textfield
这就是我如何尝试从搜索字段捕获内容,并在烧瓶一侧呈现新视图的方式:

@app.route('/?search=<url_content>', methods=['POST'])
def hello_url(url_content): 
return render_template("search-results.html", searchString = url_content])

您将使用
捕获的url参数与在
request.args
中访问的查询参数混淆了。从管线定义中删除查询参数,并在视图中访问它

from flask import request

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/search')
def search():
    search = request.args.get('search')  # will be None if form wasn't submitted
    # do something with search
    return render_template('search.html', search=search)
index.html


您有几个错误。首先,您在服务器端错误地指定了路由。无法捕获或指定烧瓶路由上的查询参数。你可以吃类似的东西

@app.route('/search')
其次,您需要在表单上提供操作和方法。所以

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

我介绍了/search路径,但您也可以从根“/”中进行同样的操作。

可能重复@RobertMoskal,问题是关于基本情况,当您呈现视图时,正如我所提到的,我的问题只在提交表单后出现。我还将指出,您的视图函数响应
POST
,但是由于您的表单缺少一个操作,因此它被隐式设置为
GET
。无论哪种方式,在
POST
方法中查找查询字符串数据而不是表单数据都有点奇怪。
<form action="{{ url_for("search") }}" method="POST">
request.form['inputSearch']