Flask 基于搜索词更新烧瓶URL

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',

我的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', 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