You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+SQLAlchemy商城搜索分页跳转首页问题如何解决?

故障原因

当前分页链接统一指向首页路由,且未携带搜索关键词参数,因此点击页码后会丢失搜索条件、跳转至全量商品的首页。
按以下步骤修改即可解决问题:

步骤1:调整search路由代码

修复原有路由的潜在异常,同时将搜索关键词传递到模板层:

@app.route('/search', methods=['GET', 'POST'])
def search():
    # 改用get方法避免无search参数时抛出KeyError
    query = request.args.get('search', '')
    if len(query) > 0:
        page = request.args.get('page', 1, type=int)
        data = Product.query.filter(Product.name.ilike(f"%{query}%")).paginate(page=page, per_page=6)
        # paginate不会返回None,删除冗余判断,同时传递搜索关键词到模板
        return render_template('home.html', data=data, search_query=query)
    # 搜索词为空直接跳转首页
    return redirect(url_for('home'))

步骤2:修改home.html分页渲染逻辑

根据是否存在搜索参数,动态生成对应分页链接:

{% for page_num in data.iter_pages(left_edge=1, right_edge=1, left_current=1, right_current=2) %}
  {% if page_num %}
     {% if data.page == page_num %}
       {% if search_query %}
         <!-- 搜索状态下跳转search路由,携带搜索词和页码 -->
         <a class="btn btn-info mb-4" href="{{ url_for('search', search=search_query, page=page_num) }}">{{ page_num }}</a>
       {% else %}
         <!-- 非搜索状态走原有首页路由 -->
         <a class="btn btn-info mb-4" href="{{ url_for('home', page=page_num) }}">{{ page_num }}</a>
       {% endif %}
     {% else %}
       {% if search_query %}
         <a class="btn btn-outline-info mb-4" href="{{ url_for('search', search=search_query, page=page_num) }}">{{ page_num }}</a>
       {% else %}
         <a class="btn btn-outline-info mb-4" href="{{ url_for('home', page=page_num) }}">{{ page_num }}</a>
       {% endif %}
     {% endif %}
   {% endif %}
{% endfor %}

修改完成后,搜索场景下的分页链接会自动携带搜索关键词,点击后将查询对应分页的匹配商品数据,不会跳转至首页。


内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 23:54:04