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
相关产品推荐
相关产品推荐

