Bootstrap 导航栏搜索将搜索查询发送到 Flask 视图
Bootstrap navbar search to send search query to Flask view
我有一个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'
不知何故,我无法在视图中抓取搜索查询。
一般来说,搜索请求是使用 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)
我有一个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'
不知何故,我无法在视图中抓取搜索查询。
一般来说,搜索请求是使用 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)