我有一个Flask网站,其中有一个'搜索栏'您在其中键入特定位置的位置ID,然后单击Submit
以转到该位置的页面(如果存在)。这是当前的表单操作:
<form id="locationinfo" action="{{ url_for('location') }}">
当您点击Submit
时,您将被带到/location?info=SITEID
,这样就可以了。我想要做的是稍微改变这种行为,以便当用户点击Submit
时,他们会被转移到/location/SITEID/
。我在我的主要Flask路线文件中设置了装饰器,但是我很难将各个部分放在一起以便将这个简单的形式组合在一起。
@app.route("/location/<locationid>/")
def locations(locationid):
...
return locationid
任何方向都会非常感谢!
[使用当前的完整表单代码编辑]
@app.route("/location")
def location():
location_id = request.args.get("info")
<form id="info" action="{{ url_for('location') }}">
<input type="text" name="info" id="locationfield">
<button type="submit">Go!</button>
</form>
答案 0 :(得分:1)
您无法更改HTML表单提交字段的方式,它们将始终位于查询字符串或正文(POST)中。一种选择是使用JavaScript覆盖提交事件以执行您自己的提交并使用结果重新呈现。
更简单的解决方案是在提交后重定向到好的URL。这使“搜索”操作与“显示”操作分开(即使它们由同一视图处理)。
@app.route('/location/')
@app.route('/location/<int:id>/')
def location(id=None):
# redirect to the second form if the id wasn't in the path
# raises 400 error if id wasn't in the query
if id is None:
return redirect(url_for('location', id=request.args['info']))
# id is in the path, continue
...
如果您想使用id以外的内容进行搜索,可以稍后展开。执行搜索,然后重定向到找到的ID。