详解使用flask_paginate进行分页查询

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

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Flask-Paginate是一个为Flask应用程序提供分页功能的扩展。它可以帮助你在网页中显示分页导航栏,并从数据库中获取指定页数的数据。 使用Flask-Paginate,你需要先安装它,可以通过运行以下命令来安装: ``` pip install Flask-Paginate ``` 安装完成后,在你的Flask应用程序中引入Flask-Paginate模块,并创建一个Paginator对象来处理分页逻辑。你可以指定每页显示的数据数量,以及总共有多少数据。 下面是一个简单的示例代码,展示了如何使用Flask-Paginate: ```python from flask import Flask from flask_paginate import Pagination, get_page_parameter app = Flask(__name__) @app.route('/') def index(): # 假设你从数据库中获取了一些数据 data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 创建Paginator对象 page = request.args.get(get_page_parameter(), type=int, default=1) per_page = 5 pagination = Pagination(page=page, total=len(data), per_page=per_page) # 根据当前页数和每页数量来获取对应的数据 start = (page-1) * per_page end = start + per_page current_data = data[start:end] # 渲染模板并传递分页相关的参数 return render_template('index.html', pagination=pagination, data=current_data) if __name__ == '__main__': app.run() ``` 在上面的示例中,我们创建了一个简单的Flask应用程序,并定义了一个路由`/`来处理首页请求。在这个路由中,我们创建了一个Paginator对象,并根据当前页数和每页数量来获取对应的数据。然后,我们将分页相关的参数传递给模板进行渲染。 在模板中,你可以使用Flask-Paginate提供的模板函数来生成分页导航栏,以及展示当前页的数据。 希望这个简单的示例能帮助你理解如何使用Flask-Paginate来实现分页功能。如果你有更多的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值