Flask分页

分页

实现分页

1.使用offset+limit
2. 切片实现,注意:[0,2]取到的是0,1,2,并且切片时,如果超过下标界限,并不会报错,返回一个空列表
3. 使用paginate实现

1.使用offset+limit

page = int(request.args.get('page',1))
num = 5
students = Student.query.offset((page-1) * num).limit(num)

2. 切片实现

students = Student.query.all()[(num * (page-1)):(page*num)]

3. 使用paginate实现

方法:
paginate = Student.query.paginate(page, 5)
iter_pages()  获取所有页码的列表

属性:
items --    当前页面中的数据

query --    分页的原查询

page --     当前页数

perv_num -- 上一页的页数

next_num    下一页的页数

has_next    如果有下一页,返回true

has_prev    如果有上一页,返回true

pages       查询得到的总页数

per_page    每页显示的记录数量

total       查询返回的记录总数


后端代码:
    paginate = Student.query.paginate(page, 5)
    # 拿到当前页的数据
    students = paginate.items

    return render_template('stus.html',stus=students,paginate=paginate)



前端例子:
    当前页: {{ paginate.page }}
    当前总页: {{ paginate.pages }}
    总条数: {{ paginate.total }}
    

    <!-- 判断是否有上一页 -->
    {% if paginate.has_prev %}
        <a href="{{ url_for('app.stu_paginate') }}?page={{ paginate.prev_num }}"">上一页</a>
    {% endif %}

    <!-- 获取页码的列表 -->
    {% for i in paginate.iter_pages() %}
        <!--<a href="/app/paginate/?page={{ i }}">{{ i }}</a>-->
        <a href="{{ url_for('app.stu_paginate') }}?page={{ i }}">{{ i }}</a>
    {% endfor %}

    <!-- 判断是否有下一页 -->
    {% if paginate.has_next %}
        <a href="{{ url_for('app.stu_paginate') }}?page={{ paginate.next_num }}">下一页</a>
    {% endif %}

猜你喜欢

转载自blog.csdn.net/weixin_42750983/article/details/82431179