Python Flask Paginate数据分页插件(bootstrap4支持)
flask-paginate一个精简的flask分页扩展, 默认使用bootstrap2样式; 支持最新的bootstrap4样式
最新版 0.5.1 已支持 bootstrap4, 简单的设置一下即可
插件安装升级
# 安装/升级插件
$ pip install -U flask-paginate
插件使用
后端: (e.g. views/users.py)
from flask import Blueprint
from flask_paginate import Pagination, get_page_parameter
mod = Blueprint('users', __name__)
@mod.route('/')
def index():
search = False
q = request.args.get('q')
if q:
search = True
page = request.args.get(get_page_parameter(), type=int, default=1)
users = User.find(...)
pagination = Pagination(page=page, total=users.count(), bs_version=4, search=search, record_name='users')
# 'page' is the default name of the page parameter, it can be customized
# e.g. Pagination(page_parameter='p', ...)
# or set PAGE_PARAMETER in config file
# also likes page_parameter, you can customize for per_page_parameter
# you can set PER_PAGE_PARAMETER in config file
# e.g. Pagination(per_page_parameter='pp')
return render_template('users/index.html', users=users, pagination=pagination)
模板文件: users/index.html
{{ pagination.info }}
{{ pagination.links }}
<table>
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ loop.index + pagination.skip }}</td>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ pagination.links }}
详解:
Blueprint这个是 flask 蓝图(blueprints) 概念的一个组建, 多个模块用这个管理比较方便get_page_parameter()这个默认值为page, 也就是分页编号, 表示当前是第几页users = User.find(...)这个是查询具体数据, 分页就要注意limit start, count这块了pagination分页对象实体, 根据核心参数创建对象page=当前是第几页total=数据总量bs_version=这个就是bootstrap的版本号了, 默认值是2search=是否是搜索,pagination.info格式化时文案会不一样record_name=展示文案pagination.info中的值
render_template(...)Jinja2模板格式化, 第一个参数为模板位置, 后面就是数据users=users传递给模板的参数, 页面用于迭代的数据列表pagination=pagination分页实体参数
pagination.info分页数据总量的展示pagination.links一组可点击的分页页码的展示
CSS定制
可以根据自己的需求调整
.pagination-page-info {
padding: .6em;
padding-left: 0;
width: 40em;
margin: .5em;
margin-left: 0;
font-size: 12px;
}
.pagination-page-info b {
color: black;
background: #6aa6ed;
padding-left: 2px;
padding: .1em .25em;
font-size: 150%;
}
效果图
数据展示: {{ pagination.info }}

页码展示: {{ pagination.links }}

其他
参数: per_page 可调整分页每页的数量, 默认10/页
参数: display_msg 可修改数据展示模板 比如:
display_msg='展示 <b>{start}-{end}</b> 总共 <b>{total}</b>'
参考:
blog comments powered by Disqus