Flask-分页
1.paginate的用法
Flask中的paginate可实现数据分页的效果,paginate(page, per_page, error_out=True)
page - 当前页数
per_page - 每页显示的条数
error_out - 是否打印错误信息
paginate的属性
paginate.page - 当前页数
paginate.pages - 总页数
paginate.total - 总条数
paginate.has_pre - 是否存在上一页 返回布尔值
paginate.has_next - 是否存在下一页 返回布尔值
paginate.iter_pages() - 所有页码 返回一个列表如[1, 2, 3, 4]
paginate(page, per_page, error_out).items - 返回当前页的所有数据
实例:查询当前所有学生信息
视图
@app.route('/get_student/')
def get_student():
page = request.args.get('page', 1, type=int)
per_page = int(request.args.get('per_page', 2))
paginate = Student.query.order_by(Student.id.desc()).paginate(page, per_page, error_out=False)
students = paginate .items
return render_template('student.html', students=students, paginate=paginate)
html页面解析数据
{% for stu in students %}
学生编号:{{ stu.id }}<br>
学生姓名:{{ stu.name }}<br>
学生年龄:{{ stu.birth }}<br>
<br>
{% endfor %}
当前页数:{{ paginate.page }}
总页数:{{ paginate.pages }}
一共有{{ paginate.total }}条数据
<br>
{% if paginate.has_prev %}
<a href="/get_student/?page={{ paginate.prev_num }}">上一页</a>
{% endif %}
页码:
{% for i in paginate.iter_pages() %}
<a href="/get_student/?page={{ i }}">{{ i }}</a>
{% endfor %}
{% if paginate.has_next %}
<a href="/get_student/?page={{ paginate.next_num }}">下一页</a>
{% endif %}
注意:分页之前需要对数据进行排序
如果在排序过程中出现类似的报错信息,可能是版本不匹配的的原因
sqlalchemy.exc.CompileError: Can’t resolve label reference for ORDER BY / GROUP BY. Textual SQL expression ‘id desc’ should be explicitly declared as text(‘id desc’)
解决方法 - SQLAlchemy的写法有三种:
1.第一种
stu = db.session.query(Student).order_by('id desc').all()
2.第二种 比较符合sqlalchemy的语法 ( 推荐 )
stu = Student.query.order_by(Student.id.desc()).all()
stu = db.session.query(Student).order_by(Student.id.desc()).all()
3.第三种
from sqlalchemy import desc
stu = db.session.query(Student).order_by(desc(Student.id)).all()
stu = Student.query.order_by(desc(Student.id)).all()
来源:CSDN
作者:HuangXiongjin
链接:https://blog.csdn.net/HuangXiongjin/article/details/103560363