详解使用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的应用,还有好多作用和好多分页形式,有了正确的参数后可以自己设置分页等信息

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我三胖哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值