Flask-分页

筅森魡賤 提交于 2019-12-16 13:59:26

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()
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!