转载自:https://blog.csdn.net/weixin_44232093/article/details/100017742
参考文档:https://pythonhosted.org/Flask-paginate/
详解使用flask_paginate进行分页查询
由于本人最近在用flask框架开发前后端交互,特此记录使用flask_paginate的用法,现记录如下
1.安装flask_paginate
- 可以使用pip下载,一键式下载非常简单
pip install flask_paginate
- 下载后import使用即可
2.flask_paginate相关参数介绍
参数 | 作用 |
---|---|
items | 当前页面中的记录信息,也就是分页查出来的数据 |
query | 分页的源查询 |
page | 当前页数 |
prev_num | 上一页的页数 |
next_num | 下一页的页数 |
has_next | 是否有下一页,如果有返回true |
has_prev | 是否有上一页,如果有返回true |
pages | 按照每页显示的记录条数得出的总页数 |
per_page | 每页显示的记录条数 |
total | 查询返回的记录总数 |
3.后台代码示例
from flask_paginate import Pagination,get_page_parameter
from Config import DBsession, EventRecordDB, draughtFan, wind, and_, StatiscData
import time
import datetime
reload(sys)
sys.setdefaultencoding('utf-8')
eventRecord = Blueprint("eventRecord", __name__)
@eventRecord.route("/eventRecordShow", methods=['GET', 'POST'])
def eventRecordShow():
userName = session['userName']
# 分页查询所有的数据 组装数据
pageSize = 18 # 每页显示的记录条数
# 获取页码 默认为1 int类型
page = request.args.get(get_page_parameter(), type=int, default=1)
start = (page - 1) * pageSize # limit后第一个参数 每一页开始位置
end = start + pageSize # limit后第二个参数 每一页结束位置
total = DBsession.query(EventRecordDB).count() # 总记录数
pagination = Pagination(by_version=3, page=page, total=total) # bootstrap版本 默认为3
eventList = DBsession.query(EventRecordDB).slice(start, end)
# 总页码数量 用来控制分页按钮
totalPage = total / pageSize if total % pageSize == 0 else (total / pageSize) + 1
# 封装的分页参数,和页面显示的参数
pageInfo={"nowPage":page, "pageSize":pageSize, "total":total, "totalPage":totalPage}
return render_template("eventRecordList.html",username=userName,
eventList=eventList,pageInfo=pageInfo,pagination=pagination)
4.前端代码
{% for event in eventList %} <!--直接循环slice查出的对象即可-->
<tr>
<td>{{ event.id }}</td>
<td>{{ event.windPowerPlant }}/{{event.draughtFanName }}/{{ event.subSiteAddress }}号子站/(#{{ event.subSiteAddress }})</td>
<td>{{ event.startTime }}</td>
<td>{{ event.endTime }}</td>
<td>{{ event.continuousTimeM }}</td>
<td>{{ event.continuousTimeH }}</td>
<td>{{ event.events }}</td>
</tr>
{% endfor %}
<!--分页查询位置 ,这里我是用自己传过来的对象判断的上下页状态
你也可以用has_next hass_prev判断 效果一样的 -->
<div id="page">
<span>页码: <span style="color: #00baaa;">{{ pageInfo.nowPage }}/{{ pageInfo.totalPage }}
</span> 每页: <span style="color: #00baaa;">{{ pageInfo.pageSize }}</span> 条记录 共: <span
style="color: #00baaa;">{{ pageInfo.total }}</span> 条记录</span>
{% if pagination.page!=pageInfo.totalPage %}
<a href="{{ url_for("eventRecord.eventRecordShow",page=pagination.page+1)}}">下一页</a>
{% else %}
<a href="javascript:void(0)",page=pagination.page+1)}}">下一页</a>
{% endif %}
{% if pagination.page!=1 %}
<a href="{{ url_for("eventRecord.eventRecordShow",page=pagination.page-1) }}">上一页 |</a>
{% else %}
<a href="javascript:void(0)">上一页 |</a>
{% endif %}
<span>转到<input type="text">页</span>
</div>
{% endblock %}
5.效果图
注意
- 分页参数设置对了,直接循环slice查询出来的对象即可,注意属性名要和数据库的字段名保持一致
- 在页码处对上下页判断可以用has_next,has_prev进行判断
以上就是flask_paginate的应用,还有好多作用和好多分页形式,有了正确的参数后可以自己设置分页等信息