提交搜索表单后,无法使用Flask应用从网址检索变量

问题描述 投票:0回答:2

我希望在用户提交搜索表单后提供新视图。我用与其他视图相同的方式制作它,但遗憾的是这次没有发生任何事情,我无法从应用路径中检索内容。 (所以这个问题不是this问题的重复,只有在提交表单后才会出现问题,它在其他所有情况下都能完美运行。)我在表单中写了一些东西,提交它,然后在浏览器中更改url,但是视图无论如何都不会改变。我几乎可以肯定,这是因为搜索slug中的?=,但不知道我应该如何在Python代码中处理它们。

实际上,当我提交表单时,我的浏览器会将我重定向到这样的网址:

http://domain/.com/?search=content+from+textfield

这就是我试图从搜索字段中捕获内容并在Flask方面呈现新视图的方式:

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

我真的很感激,如果有人能以正确的方式向我展示,基本上我只是想在搜索按钮点击后检索<url_content>函数中hello_url的值。

这是我的HTML:

<form>
 <div class="form-group">
    <input type="search" class="form-control text-center input-lg" id="inputSearch" name="search" placeholder="search">
    </div>
     <br>
<div class="text-center"><button type="submit" class="btn btn-primary btn-lg">Search!</button></div>
</form>
python forms flask
2个回答
1
投票

您使用<variable>捕获的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

<form action="{{ url_for('search') }}">
    <input name="search"/>
    <input type="submit" value="Search"/>
</form>

1
投票

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

@app.route('/search')

其次,您需要在表单上提供操作和方法。所以

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

如果未指定方法,则它将作为GET发送,并且字段将显示为查询参数。如果你发帖子,那么你可以在服务器端检索这样的字段:

request.form['inputSearch']

我介绍了/ search路由,但您可以从根“/”执行相同的操作。

© www.soinside.com 2019 - 2024. All rights reserved.