flask-sqlalchemy 分页
Flask-sqlalchemy 自带分页功能,Flask-SQLAlchemy提供paginate()方法对数据库数据进行分页。
paginate 方法参数说明:
page: 表示返回第几页的数据,默认为1
per_page: 分页时每一页的数量,默认为20
error_out : 值为Fasle请求页数超出范围时返回空,True则报404错误,默认为True
max_per_page :分页时每一页最大的数量
paginate 方法返回一个Pagination对象。
Pagination 对象的属性说明:
has_next:如果还有下一页返回 True。
has_prev:如果还有上一页返回 True。
next_num:下一页的页面码
prev_num:前一页的页面码
pages: 返回总页数
page : 返回当前页码
items :以列表的形式返回请求页的所以数据对象
Pagination 对象的方法说明:
iter_pages():返回一个列表,包含所有页码。
prev():上一页的分页对象。
next():下一页的分页对象。
示例:
# 对GoodsInfo表进行分页,返回第二页的数据,每一页两条数据,超出最大页码时返回空,每页最多3条数据
a = GoodsInfo.query.paginate(2, 2, error_out=False, max_per_page=3)
# 以列表的形式返回所有数据对象
print(a.items)
for i in a.items:
print(i)
# 总页数
print(a.pages)
# iter_pages 方法,返回一个包含所有页码的列表
print([i for i in a.iter_pages()])
模板分页示例:
{#上一页#}
{% if p.has_prev %}
<a href="{{ url_for('.goods_list') }}?sort_field=4&s_class={{ s_class }}&b_class={{ b_class }}&page={{ p.prev_num }}"><</a>
{% else %}
<a href="{{ url_for('.goods_list') }}?sort_field=4&s_class={{ s_class }}&b_class={{ b_class }}&page=1"><</a>
{% endif %}
{# 分页#}
{% for page in p.iter_pages() %}
{# 只显示3页 #}
{% if (page - 1) <= p.page <= (page + 1) %}
{# 判断当前页给标记css #}
{% if page == p.page %}
<a href="{{ url_for('.goods_list') }}?sort_field=4&s_class={{ s_class }}&b_class={{ b_class }}&page={{ page }}" class="sel" class="sel">{{ page }}</a>
{% else %}
<a href="{{ url_for('.goods_list') }}?sort_field=4&s_class={{ s_class }}&b_class={{ b_class }}&page={{ page }}" class="{{ sel }}" class="">{{ page }}</a>
{% endif %}
{% endif %}
{% endfor %}
{# 下一页#}
{% if p.has_next %}
<a href="{{ url_for('.goods_list') }}?sort_field=4&s_class={{ s_class }}&b_class={{ b_class }}&page={{ p.next_num }}">></a>
{% else %}
<a href="{{ url_for('.goods_list') }}?sort_field=4&s_class={{ s_class }}&b_class={{ b_class }}&page={{ p.pages }}">></a>
{% endif %}
页面
大类id,小类id,sort_field,page,pre_page,