分页
实现分页
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 %}