【问题标题】:Updating Flask URL based on search term根据搜索词更新 Flask URL
【发布时间】:2020-04-12 12:57:03
【问题描述】:

我的 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'),并将搜索结果重定向到那里,但没有成功。任何建议,将不胜感激。

【问题讨论】:

  • 您可能需要将实际的搜索逻辑移动到重定向端点——搜索端点唯一应该做的就是解析表单数据并发出重定向

标签: flask


【解决方案1】:

在您的 search() 方法中,成功验证表单后,返回带有代码 307 的重定向,而不是返回呈现的模板。请参阅此 SO 问题"Make a POST request while redirecting in flask" 以进一步阅读。

示例

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2022-08-15
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多