Flask分页也有几种方式,可以使用我们之前写的分页函数,可以查看我之前的笔记https://sulao.cn/post/552.html
也可以使用paginate模块来分页,paginate方法是flask-sqlalchemy提供的,下面我们来看看paginate的使用方法
paginate的用法
paginate(page, per_page, error_out=True) page 当前页数 per_page 每页显示的条数 error_out 是否打印错误信息 paginate的属性 paginate.page 当前页数 paginate.pages 总页数 paginate.total 数据总条数 paginate.has_prev 是否存在上一页 paginate.has_next 是否存在下一页 paginate.iter_pages() 所有页码 返回列表 如[1, 2, 3, 4] paginate(page, per_page,error_out).items 返回当前页的所有数据
视图函数
@stu.route('/stupage/') def stu_page(): page = int(request.args.get('page', 1)) per_page = int(request.args.get('per_page', 2)) paginate = Student.query.order_by('-s_id').paginate(page, per_page, error_out=False) stus = paginate.items return render_template('stupage.html', paginate=paginate, stus=stus)
前端页面
当前页数:{{ paginate.page }} 总页数:{{ paginate.pages }} 一共有{{ paginate.total }}条数据 {% if paginate.has_prev %} <a href="/stu/stupage/?page={{ paginate.prev_num }}">上一页</a> {% endif %} 页码: {% for i in paginate.iter_pages() %} <a href="/stu/stupage/?page={{ i }}">{{ i }}</a> {% endfor %} {% if paginate.has_next %} <a href="/stu/stupage/?page={{ paginate.next_num }}">下一页</a> {% endif %}
也可以使用jinja2宏的形式进行分页,这也可以复用
分页模板(_macros.html)
{% macro pagination_widget(pagination, endpoint) %} <ul class="pagination"> <li{% if not pagination.has_prev %} class="disabled"{% endif %}> <a href="{% if pagination.has_prev %}{{ url_for(endpoint,page = pagination.page - 1, **kwargs) }} {% else %}#{% endif %}">« </a> </li> {% for p in pagination.iter_pages() %} {% if p %} {% if p == pagination.page %} <li class="active"> <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a> </li> {% else %} <li> <a href="{{ url_for(endpoint, page = p, **kwargs) }}">{{ p }}</a> </li> {% endif %} {% else %} <li class="disabled"> <a href="#">…</a> </li> {% endif %} {% endfor %} <li{% if not pagination.has_next %} class="disabled"{% endif %}> <a href="{% if pagination.has_next %}{{ url_for(endpoint,page = pagination.page + 1, **kwargs) }}{% else %}#{% endif %}">»</a> </li> </ul> {% endmacro %}
然后就是在需要分页的地方引入此模板
{% import "_macros.html" as macros %} ..........其他代码省略........... {%if pagination%} <div class="pagination"> {{ macros.pagination_widget(pagination, '.index') }} </div> {% endif %}