我希望在用户提交搜索表单后提供新视图。我用与其他视图相同的方式制作它,但遗憾的是这次没有发生任何事情,我无法从应用路径中检索内容。 (所以这个问题不是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>
您使用<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>
你有几个错误。首先,您错误地指定了服务器端的路由。您无法在烧瓶路径上捕获或指定查询参数。你可以有类似的东西
@app.route('/search')
其次,您需要在表单上提供操作和方法。所以
<form action="{{ url_for("search") }}" method="POST">
如果未指定方法,则它将作为GET发送,并且字段将显示为查询参数。如果你发帖子,那么你可以在服务器端检索这样的字段:
request.form['inputSearch']
我介绍了/ search路由,但您可以从根“/”执行相同的操作。