Flask 基于搜索词更新烧瓶URL
我的Flask应用程序中有一个函数,返回用户搜索数据库的结果。用户从/search视图进行搜索。当用户搜索时,我希望URL是example.com/search_results?q={{q}}&page=1,其中q是搜索词。相反,URL仍然是/search。当他们在搜索结果中导航时,这是固定的,因为分页将他们指向href=/search_results?q={{q}}和page={{page+1}}。我尝试了几种不同的方法,但我想不出来。我的路线是:Flask 基于搜索词更新烧瓶URL,flask,Flask,我的Flask应用程序中有一个函数,返回用户搜索数据库的结果。用户从/search视图进行搜索。当用户搜索时,我希望URL是example.com/search_results?q={{q}}&page=1,其中q是搜索词。相反,URL仍然是/search。当他们在搜索结果中导航时,这是固定的,因为分页将他们指向href=/search_results?q={{q}}和page={{page+1}}。我尝试了几种不同的方法,但我想不出来。我的路线是: @app.route('/search',
@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm()
search_results=[]
if form.validate_on_submit():
search_results = list(db.openings.find({"$text": {"$search": form.search.data}}))
num_results = len(search_results)
return render_template('search_results.html', form=form, results=search_results[:10], start=0, end=10, page=1, total=2, q=form.search.data, num_results=num_results)
return render_template('search.html', form=form)
@app.route('/search_results', methods=['GET', 'POST'])
def search_results():
form = SearchForm()
search_results=[]
if form.validate_on_submit():
search_results = list(db.openings.find({"$text": {"$search": form.search.data}}))
num_results = len(search_results)
return render_template('search_results.html', title='Home', form=form, results=search_results[:10], start=0, end=10, page=1, total=2, q=form.search.data, num_results=num_results)
per_page = 10
offset = 0
page = request.args.get('page', 1, type=int)
query = request.args.get('q')
search_results = list(db.openings.find({"$text": {"$search": query}}))
total = len(search_results)
t_pages = total // per_page
start = offset + ((page-1) * per_page)
end = start + per_page
results = search_results[start:end]
num_results = len(search_results)
return render_template('search_results.html', title='Home', form=form, results=results, page=page, total=t_pages, q=query, start=start, end=end, num_results=num_results)
我尝试过创建一个新的路由,比如@app.route'search_results?q={{q}}&page=1'并将搜索结果重定向到那里,但没有成功。如有任何建议,将不胜感激 在搜索方法中,成功验证表单后,返回代码为307的重定向,而不是返回渲染模板。请参阅此问题以进一步阅读
范例
您可能需要的是将实际的搜索逻辑移动到重定向端点-搜索端点应该做的唯一事情是解析表单数据并发出重定向
from flask import redirect, url_for
# ...
@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm()
if form.validate_on_submit():
return redirect(url_for('search_results'), code=307)
return render_template('search.html', form=form)
@app.route('/search_results', methods=['GET', 'POST'])
def search_results():
form = SearchForm()
# blah blah
if form.validate_on_submit():
# Form data is avaliable here either posted from browser or 307 redirect
# blah blah