我有一个烧瓶网站,该网站具有'搜索栏',在其中您输入特定位置的位置ID,然后单击 Submit
,以将其带到该位置的页面,如果存在。这是当前的表单操作:
<form id="locationinfo" action="{{ url_for('location') }}">
单击Submit
时,您将被带到/location?info=SITEID
,这很好。我要做的是稍微更改此行为,以便当用户单击Submit
时,它们将被带到/location/SITEID/
。我在主瓶路线文件中设置了装饰器,但是我正在努力将这些件放在一起以将这个简单的形式放在一起。
@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>
您无法更改HTML表单提交其字段的方式,它们将始终在查询字符串或身体中(帖子)。一种选择是使用JavaScript覆盖提交事件,以执行您自己的提交和重新渲染结果。
提交后,更简单的解决方案是将其重定向到NICE 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。