Flask实现分页显示数据

效果图

在做网页的时候,通常会展示很多数据,如果把全部数据放在一页显示的话,会让浏览器加载变得更慢,所以通常在展示很多数据的时候进行分页显示,让浏览器进行片段式加载。先上一个效果图:

步骤

首先是路由(views.py):设计思路是根据查询的页码作为参数,利用FlaskSQLAlchemy的Model进行查询并对查询结果进行分页处理。

@admin.route("/course/list/<int:page>/", methods=["GET"])

def courses_list(page=None):

    if page is None:#如果没有page则显示第一页

        page = 1

    page_data = T_courses.query.order_by(

        T_courses.cno.asc()#按照课程号正序排列

).paginate(page=page, per_page=10)

#paginate方法返回一个sqlalchemy.Pagination类型对象

    return render_template("admin/courses_list.html", page_data=page_data)

page_data是一个FlaskSQLAlchemy中的Pagination类型对象一个Query对象调用paginate方法就获得了Pagination对象。paginate方法传入了两个参数,一个是当前页,另一个是每一页最多显示多少数据。paginate的返回值为代表当前页的Pagination对象。

一个Paginationi对象的常用属性有:

items 当前页面中的所有记录(比如当前页上有5条记录,items就是以列表形式组织这5个记录)

query 当前页的query对象(通过query对象调用paginate方法获得的Pagination对象)

page 当前页码(比如当前页是第5页,返回5)

prev_num 上一页页码

next_num 下一页页码

has_next 是否有下一页 True/False

has_prev 是否有上一页 True/False

pages 查询得到的总页数 per_page 每页显示的记录条数

total 总的记录条数

常用方法有:

prev() 上一页的分页对象Pagination

next() 下一页的分页对象Pagination

iter_pages(left_edge=2,left_current=2,right_current=5,right_edge=2)

iter_pages 用来获得针对当前页的应显示的分页页码列表。

假设当前共有100页,当前页为50页,按照默认的参数设置调用iter_pages获得的列表为:

[1,2,None,48,49,50,51,52,53,54,55,None,99,100]

接下来是模板,一个是显示课程的页面(courses_list.html),

一个是分页页面(admin_page.html)

{% import "ul/admin_page.html" as pg %}

{% for v in page_data.items %}

<tr>

<td>{{v.cno}}</td>

<td>{{v.cname}}</td>

<td>{{v.credit}}</td>

<td>{{v.hour}}</td>

<td>{{v.theory_hour}}</td>                                 <td>{{v.practice_hour}}</td>

<td>{{v.year}}</td>

<td>{{v.term}}</td>

<td>{{v.methods}}</td>

</tr>

{% endfor %}

{{ pg.page(page_data,'admin.courses_list') }}

这段代码首先是导入了admin_page.html,然后使用for循环对views.py查询到的内容进行遍历,接着向分页模板页面传入了两个值。

接下来是分页模板页面页面:

{% macro page(data,url) %}

{% if data %}

<ul class="pagination pagination-sm no-margin pull-right">

    <li><a href="{{ url_for(url,page=1) }}">首页</a></li>

    {% if data.has_prev %}

    <li><a href="{{ url_for(url,page=data.prev_num) }}">上一页</a></li>

    {% else %}

    <li><a href="#">上一页</a></li>

    {% endif %}

    {% if data.pages>5%}

    {% if data.page <4 %}

    {% for i in range(1,4) %}

    {% if i == data.page %}

    <li><a href="#">{{ i }}</a></li>

    {% else %}

    <li><a href="{{ url_for(url,page=i) }}">{{ i }}</a></li>

    {%endif%}

    {% endfor %}

    {%elif (data.pages-data.page)<3%}

    {% for i in range(data.pages-3,data.pages+1) %}

    {% if i == data.page %}

    <li><a href="#">{{ i }}</a></li>

    {% else %}

    <li><a href="{{ url_for(url,page=i) }}">{{ i }}</a></li>

    {%endif%}

    {% endfor %}

    {%else%}

    {% for i in range(data.page-3,data.page+4) %}

    {% if i == data.page %}

    <li><a href="#">{{ i }}</a></li>

    {% else %}

    <li><a href="{{ url_for(url,page=i) }}">{{ i }}</a></li>

    {%endif%}

    {% endfor %}

    {%endif%}

    {%else%}

    {% for v in data.iter_pages()%}

    {% if v == data.page %}

    <li><a href="#">{{ v }}</a></li>

    {% else %}

    <li><a href="{{ url_for(url,page=v) }}">{{ v }}</a></li>

    {% endif%}

    {% endfor %}

    {% endif%}

    {% if data.has_next %}

    <li><a href="{{ url_for(url,page=data.next_num) }}">下一页</a></li>

    {% else %}

    <li><a href="#">下一页</a></li>

    {% endif %}

    <li><a href="{{ url_for(url,page=data.pages) }}">尾页{{data.pages}}</a></li>

</ul>

{% endif %}

{% endmacro  %}

这段代码整体来说是根据当前页对上一页、页码、下一页进行不同的设置,利用了利用JinJa2的if语句。

1、判断当前页码,只显示当前页码上下三页的选项,如果直接将左右页码展示出来,数据太多会直接报错。

2、判断是否还有前一页和后一页,如果没有才能点击上一页和下一页,否则不能点击。

3、判断页码中是否为当前页,将本页的页码显示为高亮,让用户判断当前页是第几页。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
程序使用flash和ASP交互,使用access数据库保存聊天记录。需要的朋友可以下载到自己的网站目录使用; 演示地址:http://www.xyflash.com/myfile/chat/call.html 目前已经有以下功能: 2008-8-6 完成基本的程序界面和后台 2008-8-8 修改部分数据传送方式,稳定性进一步提高。并增加窗口抖动功能。 2008-8-10 增加聊天表情。 2008-8-11 新增加了公告,并优化了信息更新方式,程序应该可以更加的稳定。下一步准备增加聊天窗口背景和一些设置。 2008-9-23 增加聊天背景和音乐。下一步打算修改程序核心部分。提高消息发送速度,并解决聊天中可能出现的BUG 2008-9-29 核心代码全部重写,程序稳定性极大的提高,修复一些使用中的小问题,并增加查看聊天记录功能。 2008-9-30 修补一些可能被恶意攻击的漏洞,提高了程序的安全性。 2008-10-1 增加几个系统设置功能,方便大家根据不同的需要进行设置 2008-10-2 修改用户列表显示方式。 2008-10-3 增加聊天文字颜色设置。 2008-10-4 增加聊天文字字型字号设置。 2008-10-5 优化程序,解决了占用CPU过高的问题,程序运行极为流畅~ 2008-10-9 增加音乐播放器,修复新消息提醒出错的BUG,增加enter发送消息的选项 2008-10-10 新增私聊功能。方便用户进行不公开交谈。 2008-10-15 增加聊天类型选择 2008-10-15 实现聊天消息中包含的网址可以直接点击 2008-10-17 修改网页背景图片,美化聊天环境 2008-10-26 音乐播放器增加添加音乐功能 2008-10-27 重新修改音乐播放器外观 2008-10-28 实现聊天窗口拖放,修改表情为分页显示,提高显示速度。增加对话窗口抖动 2008-10-30 增加清屏功能,避免长时间聊天,对话窗口消息太多太耗资源
第1章 Visual C#2008与窗体界面 案例1 飘动动画窗体 案例2 透明动画窗体 案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通窗体 案例7 总在最前的登录窗体 案例8 在屏幕中央的圓形窗体 案例9 半透明的T形窗体 案例10 多文档MDI窗体 案例11 渐变色窗体 案例12 笑脸窗体 案例13 八边形图形窗体 本章小结 第2章 Visual C# 2008与图形图像 案例1 动态绘制直线和曲线 案例2 动态绘制验证码 案例3 椭圓及椭圆弧的绘制 案例4 移动鼠标复制坐标区域图像 案例5 动态获取当前程序的图标 案例6 动态获取系统图标 案例7 动态打开、显示和缩放图像 案例8 在图像上动态加载文字 案例9 水平和垂直遮罩图像动画效果 案例10 图像拉伸动画效果 案例11 百叶窗图像动画效果 案例12 翻转和扩展图像动画效果 案例13 图像的纹理和浮雕效果 案例14 图像的马赛克效果 本章小结 第3章 Visual C#2008与多媒体 案例1 抛物线动画效果 案例2 图像滚动动画效果 案例3 飞舞的雪花 案例4 电子时钟 案例5 Flash动画播放器 案例6 AvI动画播放器 案例7 GⅣ动画播放器 案例8 MP3音乐播放器 案例9 肥皂泡泡屏幕保护程序 案例1O 图像随机显示屏幕保护程序 案例11 滚动字幕屏幕保护程序 案例12 带有背景音乐的随机字幕屏幕保护程序 案例13 托盘动画图标程序 本章小结 第4章 Visual C#2006与数据库 案例1 利用DataGridView控件显示数据库信息 案例2 数据库数据记录单 案例3 利用下拉列表框动态查询数据库信息 案例4 利用ListView控件导航数据库信息 案例5 带有数据库的会员登录系统 案例6 动态添加数据库数据信息 案例7 动态修改数据库数据信息 案例8 动态删除数据库数据信息 案例9 带有图像信息的数据库数据记录单 案例10 分页显示数据库中的记录数据信息 案例11 连接Excel 2008表格 案例12 连接SQL Server数据库 本章小结 第5章 Visual C#2008的SQL查询与图表技朮 案例1 多表连接条件查询 案例2 分组条件查询 案例3 排序查询 案例4 嵌套查询 案例5 视图在Select查询语句中的应用 案例6 存储过程在Select查询语句中的应用 案例7 动态获取数据库中所有视图和存储过程 案例8 柱状图表分析图 案例9 柱状图表的升序和降序 案例10 折线图表分析图 案例11 多折线图表分析图 案例12 饼形图表分析图 本章小结 第6章 Visualc#2008的打印与水晶报表技术 案例1 利用Windows组件打印数据库中的数据 案例2 利用Windows组件打印数据库数据柱状图表 案例3 利用Windows组件打印输出图像 案例4 调用Word软件打印数据库中的数据 案例5 调用Excel软件打印数据库中的数据 案例6 利用水晶报表打印数据库中的数据 案例7 利用水晶报表分组统计数据库中的数据 案例8 利用水晶报表筛选数据库中的数据 案例9 图表在水晶报表中的应用 本章小结 第7章 VisualC#2008与Windows系统设置 案例1 任务栏的显示与隐藏 案例2 开始按钮的显示与隐藏 案例3 动态设置系统输入法 案例4 动态设置桌面颜色 案例5 动态设置鼠标的属性 案例6 动态获取鼠标位置 案例7 声卡的检测及声音,音频设备属性的设置 案例8 只能运行一次的托盘程序 案例9 动态设置程序是否为开机运行 案例10 动态设置注册表是否可运行 案例11 禁止修改IE浏览器的主页 案例12 动态锁定计算机 案例13 计算机的注销、关闭和重新启动 案例14 动态获取计算机系统基本信息 本章小结 第8章 VisualC#2008与文件 案例1 动态创建文件并输入文件内容 案例2 动态打开和保存文件 案例3 动态删除文件及清空回收站 案例4 动态创建和删除文件夹及显示其是否存在 案例5 动态获取文件夹中的文件 案例6 动态搜索文件或文件夹 案例7 动态显示磁盘容量图表 案例8 动态移动文件 案例9 动态复制文件 案例1O 动态调用可执行EXE文件 案例11 动态查看和修改文件属性 案例12 动态比较文件 本章小结 第9章 VisualC#2008算法及控件的应用 案例1 利用冒泡算法实现从小到大排序 案例2 利用希尔算法实现从大到小排序 案例3 判断主机IP合法性算法 案例4 欧几里德最大公因子算法 案例5 字符串的加密算法 案例6 随机生成新身份证算法 案例7 利用ListBox控件实现数据源字段的选择 案例8 利用LislNiew控件实现图标的管理 案
目录: 第1章 Visual C#2008与窗体界面 案例1 飘动动画窗体 案例2 透明动画窗体 案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通窗体 案例7 总在最前的登录窗体 案例8 在屏幕中央的圓形窗体 案例9 半透明的T形窗体 案例10 多文档MDI窗体 案例11 渐变色窗体 案例12 笑脸窗体 案例13 八边形图形窗体 本章小结 第2章 Visual C#2008与图形图像 案例1 动态绘制直线和曲线 案例2 动态绘制验证码 案例3 椭圓及椭圆弧的绘制 案例4 移动鼠标复制坐标区域图像 案例5 动态获取当前程序的图标 案例6 动态获取系统图标 案例7 动态打开、显示和缩放图像 案例8 在图像上动态加载文字 案例9 水平和垂直遮罩图像动画效果 案例10 图像拉伸动画效果 案例11 百叶窗图像动画效果 案例12 翻转和扩展图像动画效果 案例13 图像的纹理和浮雕效果 案例14 图像的马赛克效果 本章小结 第3章 Visual C#2008与多媒体 案例1 抛物线动画效果 案例2 图像滚动动画效果 案例3 飞舞的雪花 案例4 电子时钟 案例5 Flash动画播放器 案例6 AvI动画播放器 案例7 GⅣ动画播放器 案例8 MP3音乐播放器 案例9 肥皂泡泡屏幕保护程序 案例1O 图像随机显示屏幕保护程序 案例11 滚动字幕屏幕保护程序 案例12 带有背景音乐的随机字幕屏幕保护程序 案例13 托盘动画图标程序 本章小结 第4章 Visual C#2006与数据库 案例1 利用DataGridView控件显示数据库信息 案例2 数据库数据记录单 案例3 利用下拉列表框动态查询数据库信息 案例4 利用ListView控件导航数据库信息 案例5 带有数据库的会员登录系统 案例6 动态添加数据库数据信息 案例7 动态修改数据库数据信息 案例8 动态删除数据库数据信息 案例9 带有图像信息的数据库数据记录单 案例10 分页显示数据库中的记录数据信息 案例11 连接Excel 2008表格 案例12 连接SQL Server数据库 本章小结 第5章 Visual C#2008的SQL查询与图表技朮 案例1 多表连接条件查询 案例2 分组条件查询 案例3 排序查询 案例4 嵌套查询 案例5 视图在Select查询语句中的应用 案例6 存储过程在Select查询语句中的应用 案例7 动态获取数据库中所有视图和存储过程 案例8 柱状图表分析图 案例9 柱状图表的升序和降序 案例10 折线图表分析图 案例11 多折线图表分析图 案例12 饼形图表分析图 本章小结 第6章 Visual C#2008的打印与水晶报表技朮 案例1 利用Windows组件打印数据库中的数据 案例2 利用Windows组件打印数据库数据柱状图表 案例3 利用Windows组件打印输出图像 案例4 调用Word软件打印数据库中的数据 案例5 调用Excel软件打印数据库中的数据 案例6 利用水晶报表打印数据库中的数据 案例7 利用水晶报表分组统计数据库中的数据 案例8 利用水晶报表筛选数据库中的数据 案例9 图表在水晶报表中的应用 本章小结 第7章 Visual C#2008与Windows系统设置 案例1 任务栏的显示与隐藏 案例2 开始按钮的显示与隐藏 案例3 动态设置系统输入法 案例4 动态设置桌面颜色 案例5 动态设置鼠标的属性 案例6 动态获取鼠标位置 案例7 声卡的检测及声音、音频设备属性的设置 案例8 只能运行一次的托盘程序 案例9 动态设置程序是否为开机运行 案例10 动态设置注册表是否可运行 案例11 禁止修改IE浏览器的主页 案例12 动态锁定计算机 案例13 计算机的注销、关闭和重新启动 案例14 动态获取计算机系统基本信息 本章小结 第8章 Visual C#2008与文件 案例1 动态创建文件并输入文件内容 案例2 动态打开和保存文件 案例3 动态删除文件及清空回收站 案例4 动态创建和删除文件夹及显示其是否存在 案例5 动态获取文件夹中的文件 案例6 动态搜索文件或文件夹 案例7 动态显示磁盘容量图表 案例8 动态移动文件 案例9 动态复制文件 案例10 动态调用可执行EXE文件 案例11 动态查看和修改文件属性 案例12 动态比较文件 本章小结 第9章 Visual C#2008算法及控件的应用 案例1 利用冒泡算法实现从小到大排序 案例2 利用希尔算法实现从大到小排序 案例3 判断主机Ⅳ合法性算法 案例4 欧几里德最大公因子算法 案例5 字符串的加密算法 案例6 随机生成新身份证算法 案例7 利用ListBox控件实现数据源字段的选择 案例8 利用ListView控件实现图标的管理 案例9 利用TreeView控件浏览图像 案例10 利用ProgressBar控件实现进度控制 案例11 利用Timer控件显示当前时间 章小结 第10章 Visual C#2008与网络开发 案 例1 动态获取本机MAC地址 案例2 动态获取本机IP地址 案例3 动态网络Ping操作 案例4 定时访问互联网 案例5 定制网络浏览器程序 案例6 动态发送电子邮件 案例7 动态读取XML件 本章小结 第11章 Visual C#2008与Web应用程序 案例1 利用AdRotator控件随机显示广告图像 案例2 利用Calendar控件动态查询系统日期 案例3 会员登录系统 案例4 利用Application对象实现网站计数器 案例5 利用Session对象实现留言板 本章小结

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

算法与编程之美

欢迎关注『算法与编程之美』

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

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

打赏作者

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

抵扣说明:

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

余额充值