【问题标题】:Bootstrap navbar search to send search query to Flask view引导导航栏搜索以将搜索查询发送到 Flask 视图
【发布时间】:2021-04-21 17:53:17
【问题描述】:

我有一个 base.html,其中导航栏有一个搜索框。

        <form class="form-inline my-2 my-lg-0" action={{ url_for('search') }} method="POST">
          <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
          <input class="form-control mr-sm-2" name="search" type="search" placeholder="Search Storage Request" aria-label="Search">
          <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        </form>

这里是视图:

@app.route('/search', methods=['GET', 'POST'])
def search():
    query = request.args['search']
    req_search = Storage.query.filter_by(req_no=query)
    return render_template('search.html', req_search=req_search)

但是当我从导航栏搜索框中搜索任何内容时。这是我得到的错误:

query = request.args['search']
AttributeError: 'function' object has no attribute 'args'

不知何故,我无法在视图中抓取搜索查询。

【问题讨论】:

    标签: flask jinja2 flask-sqlalchemy flask-wtforms


    【解决方案1】:

    一般来说,搜索请求是使用GET 方法执行的,您甚至不需要提及method="GET",因为它是默认方法。此外,您的表单中不需要csrf_token,因为它是GET 请求。`

    所以我建议你在

    你的模板

    <form class="form-inline my-2 my-lg-0" action="{{ url_for('search') }}">
      <input class="form-control mr-sm-2" name="search" type="search" placeholder="Search Storage Request" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
    

    你的视图函数

    @app.route('/search')  # 'GET' is the default method, you don't need to mention it explicitly
    def search():
    
        # query = request.args['search']
        query = request.GET.get('search')  # try this instead
    
        req_search = Storage.query.filter_by(req_no=query)
        return render_template('search.html', req_search=req_search)
    

    【讨论】:

    • 谢谢 cizario,你写的。我将其更改为 GET。另外,我又犯了一个愚蠢的错误。我错误地用python关键字“request”定义了一个函数。现在该应用程序完美运行。
    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多