Flask分页也有几种方式,可以使用我们之前写的分页函数,可以查看我之前的笔记:https://sulao.cn/post/549
也可以使用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 %}
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/708
评论列表