我正在尝试使用我的烧瓶应用程序进行简单的搜索功能。我有以下代码启动搜索
<form action="/search" method=post>
<input type=text name=search value="{{ request.form.search }}"></br>
<div class="actions"><input type=submit value="Search"></div>
</form>
这与我的search / controllers.py脚本挂钩,看起来像这样
@search.route('/search/')
@search.route('/search/<query>', methods=['GET', 'POST'])
def index(query=None):
es = current_app.config.get("es")
q = {"query":{ "multi_match":{"fields":["name","tags","short_desc","description"],"query":query,"fuzziness":"AUTO"}}}
matches = es.search('products', 'offerings', body=q)
return render_template('search/results.html', services=matches['_source'])
不幸的是,每当我实际搜索时,我都会收到路由错误:
FormDataRoutingRedirect:已向此网址发送请求(http://localhost:8080/search),但路由系统自动向“http://localhost:8080/search/”发出了重定向。 URL是使用尾部斜杠定义的,因此如果没有使用斜杠,Flask将自动重定向到带有斜杠的URL。确保直接将您的POST请求发送到此URL,因为我们无法使浏览器或HTTP客户端可靠地重定向表单数据或没有用户交互。注意:此异常仅在调试模式下引发
我尝试将方法更改为methods=['POST']
,但没有任何区别。
答案 0 :(得分:3)
使用url_for('index')
为操作生成正确的网址。
<form action="{{ url_for('index') }}">
目前,您在没有尾随/
的情况下提交到网址。 Flask将其重定向到尾随/
的路由,但POST数据在许多浏览器上都没有重定向,因此Flask会警告您这个问题。
答案 1 :(得分:0)
如错误所述,您的表单将发布到/ search,但您的处理程序已设置为/ search /。让他们一样。