创建一个烧瓶搜索栏,该栏插入URL_FOR()插入URI变量



我有一个烧瓶网站,该网站具有'搜索栏',在其中您输入特定位置的位置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。

最新更新