Flask 分页重定向

Flask pagination redirect

我有一个使用 FlaskSQLAlchemy 的网上商店,我在其中使用如下路径在主页上实现了分页:

@app.route('/')
@app.route('/home')
def home():
    page = request.args.get('page', 1, type=int)
    data = Product.query.paginate(page=page, per_page=6)
    return render_template('home.html', data=data)

我遇到的问题是搜索功能,如下所示:

@app.route('/search', methods=['GET', 'POST'])
def search():
    query = request.args['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)
        if data is not None:
            return render_template('home.html', data=data)
        elif data is None:
            return redirect(url_for('home'))
    if len(query) == 0:
        return redirect(url_for('home'))

这是我的 search 表格:

<li class="nav-item">
 <form class="form-inline" action="{{ url_for('search') }}">
   <input class="form-control mr-sm-2 ml-2" name="search" type="search" placeholder="Търсене" aria-label="Search">
   <button class="btn btn-outline-info my-2 my-sm-0" type="submit"><i class="fa fa-search"></i></button>
 </form>
</li>

这是我 home.html 中页码的 jinja2 代码:

{% 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 %}
       <a class="btn btn-info mb-4" href="{{ url_for('home', 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 %}
{% endfor %}

当我搜索产品时,查询会显示正在搜索的项目,但如果有多页结果,当我点击页码时,它会重定向到 home.html,其中包含来自第一条路线。

有没有办法让搜索后的结果和search功能的页面保持一致?

您可以使用 javascript 更新 url

中的查询

此函数将使用两个参数在当前 url 中搜索密钥,如果存在则更新它,否则添加它。

js

function url_manager(key,value){
const url = new URL(window.location.href);
url.searchParams.set(key,value );
window.location.replace(url)
}

用按钮标签替换锚标签<button class="page_num_btn_class btn btn-info mb-4" type="button">{{ page_num }}</button>

注意 - 您必须包含 jquery

<script src="https://code.jquery.com/jquery-3.1.0.js" ></script>

可以调用按钮的点击事件

$(".page_num_btn_class").click(function (e){
url_manager("page",$(this).text())
})