栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python Flask使用Pagination实现分页展示数据

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Flask使用Pagination实现分页展示数据

前提:

  • 不使用Flask-SQLAlchemy来操作数据库及分页等,直接使用pymysql连接数据库
  • 使用pymysql连接到数据库后,通过执行查询语句获取到数据库字段值
连接数据库
  • __init__.py
version = 'Release'
Release = {
    'Mysql': {'username': '用户名', 'password': '密码', 'dbName': '数据库名'},
    ...
    'Host': {'address': 'ip地址(可以是127也可以是0)', 'port': '端口号'},
    ...
}
...
  • connMysql.py
## 自定义一个连接数据库的方法(新建一个py文件)
# 分页获取数据
def test1(table_name, data):
	## Release['MysqlIpOut']['HOST']:需要在__init__.py中定义好,写上后会提示需要导入
    dbIP = Release['MysqlIpOut']['HOST']
    # 连接数据库
    mysql_connect = pymysql.connect(host=dbIP,
                                    user=Release['Mysql']['username'],
                                    password=Release['Mysql']['password'],
                                    database=Release['Mysql']['dbName'],
                                    charset="utf8",
                                    port=3306,
                                    cursorclass=pymysql.cursors.DictCursor)
    cursor = mysql_connect.cursor()
    # 查询语句
    sql = "SELECt" + data + "FROM `" + table_name + "`"
    try:
    	# 执行sql语句
        cursor.execute(sql)
        # 提交更改为稳定存储
        mysql_connect.commit()
        # fetchall:获取所有行
        results = cursor.fetchall()
    except:
        results = {'code': '102'}
    finally:
    # 关闭连接
        mysql_connect.close()
    return results

实现分页
  • app.py
    • 通过参考网上案例实现
    • http://t.csdn.cn/HKoh0
# 测试分页
@app1.route('/test')
def page_test():
    # 获取数据库中的数据(使用connMysql.py中写好的方法来查)
    content = test1('demo', '*')
    # print(len(content), type(content), content)		# 测试输出
    # 每一页显示记录数
    pageSize = 5
	
    page = request.args.get('page', 1, type=int)
    # 为了处理用户输入的超出页码范围的数字,添加以下代码
    if page > len(content) or page < 1:
        page = 1

    # 对获取到的数据进行切片
    start = (page - 1) * pageSize	# 开始,每一页开始位置
    end = start + pageSize			# 结束,每一页结束位置
    slices = slice(start, end)
    slicontent = content[slices]	# 切片

    """
    query: 我们要分页的集合对象,content为要分页的对象
    page:当前请求的页码
    per_page:每页的数据个数,自定义
    total:数据总量,也就是共有19条数据
    items:当前页需要显示的数据,因为页码是从1开始的,而列表的索引是从0开始的,所以要处理好这种转化关系。我们的例子是每页只显示5条数据,还比较好计算,如果是多条数据,计算的时候要细心一些
    """
    # 下面就是得到的某一页的分页对象
    current_page = Pagination(content, page=page, per_page=pageSize, total=len(content), items=content[page-1])
    # print(type(current_page), current_page)		# 测试输出

    total_page = current_page.total     # 共有几条数据

    context = {
        'content': content,           # 获取到的数据库的数据
        'total_page': total_page,     # 共有几条数据
        'slicontent': slicontent,		# 数据切片显示
    }

    return render_template("test.html", **context)

前端页面

分页栏使用的是Bootstrap框架封装好的分页效果
参考:http://t.csdn.cn/7lVQG

  • test.html


    
        
        
        分页展示
    

    
        

用户信息



{% for cu in slicontent %} 编号:{{ cu['id'] }},姓名:{{ cu['name'] }},年龄:{{ cu['age'] }}

{% endfor %}
{{ current_page.links }} {# 分页栏 #} 共有{{ total_page }}条数据
实现效果

通过输入 ip:开放的端口/test 进行访问

补充:flask_paginate相关参数介绍
参数作用
items当前页面中的记录信息,也就是分页查出来的数据
query分页的源查询
page当前页数
prev_num上一页的页数
next_num下一页的页数
has_next是否有下一页,如果有返回true
has_prev是否有上一页,如果有返回true
pages按照每页显示的记录条数得出的总页数
per_page每页显示的记录条数
total查询返回的记录总数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号