python前后端自定义分页器


Posted in Python onApril 13, 2022

自定义分页器封装代码

封装分页相关数据:

  • :param current_page: 当前页
  • :param all_count: 数据库中的数据总条数
  • :param per_page_num: 每页显示的数据条数
  • :param pager_count: 最多显示的页码个数
class Pagination(object):
def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):

try:
current_page = int(current_page)
except Exception as e:
current_page = 1

if current_page < 1:
current_page = 1

self.current_page = current_page

self.all_count = all_count
self.per_page_num = per_page_num

# 总页码
all_pager, tmp = divmod(all_count, per_page_num)
if tmp:
all_pager += 1
self.all_pager = all_pager

self.pager_count = pager_count
self.pager_count_half = int((pager_count - 1) / 2)

@property
def start(self):
return (self.current_page - 1) * self.per_page_num

@property
def end(self):
return self.current_page * self.per_page_num

def page_html(self):
# 如果总页码 < 11个:
if self.all_pager <= self.pager_count:
pager_start = 1
pager_end = self.all_pager + 1
# 总页码 > 11
else:
# 当前页如果<=页面上最多显示11/2个页码
if self.current_page <= self.pager_count_half:
pager_start = 1
pager_end = self.pager_count + 1

# 当前页大于5
else:
# 页码翻到最后
if (self.current_page + self.pager_count_half) > self.all_pager:
pager_end = self.all_pager + 1
pager_start = self.all_pager - self.pager_count + 1
else:
pager_start = self.current_page - self.pager_count_half
pager_end = self.current_page + self.pager_count_half + 1

page_html_list = []
# 添加前面的nav和ul标签
page_html_list.append('''
<nav aria-label='Page navigation' style="text-align: center;">
<ul class='pagination'>
''')
first_page = '<li><a href="?page=%s">首页</a></li>' % (1)
page_html_list.append(first_page)

if self.current_page <= 1:
prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
else:
prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)

page_html_list.append(prev_page)

for i in range(pager_start, pager_end):
if i == self.current_page:
temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)
else:
temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)
page_html_list.append(temp)

if self.current_page >= self.all_pager:
next_page = '<li class="disabled"><a href="#">下一页</a></li>'
else:
next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
page_html_list.append(next_page)

last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
page_html_list.append(last_page)
# 尾部添加标签
page_html_list.append('''
</nav>
</ul>
''')
return ''.join(page_html_list)

自定义分页器使用

后端

from utils.mypage import Pagination
def get_book(request):
book_list = models.Book.objects.all()
current_page = request.GET.get("page",1)
all_count = book_list.count()
page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10)
page_queryset = book_list[page_obj.start:page_obj.end]
return render(request,'booklist.html',locals())

前端

<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
{% for book in page_queryset %}
<p>{{ book.title }}</p>
{% endfor %}
{{ page_obj.page_html|safe }}
</div>
</div>
</div>

python前后端自定义分页器

到此这篇关于python自定义分页器的实现的文章就介绍到这了!

Python 相关文章推荐
Python模块学习 datetime介绍
Aug 27 Python
Windows下PyMongo下载及安装教程
Apr 27 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
python实现二维插值的三维显示
Dec 17 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
Python中itertools库的四个函数介绍
Apr 06 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
php 中的str_replace 函数总结
2007/04/27 PHP
php防攻击代码升级版
2010/12/29 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JavaScript算法系列之快速排序(Quicksort)算法实例详解
2016/09/04 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
Node.js console控制台简单用法分析
2019/01/04 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
详细介绍Python中的偏函数
2015/04/27 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
Django的性能优化实现解析
2019/07/30 Python
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
会计电算化毕业生自荐信
2014/03/03 职场文书
环境保护建议书
2014/08/26 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android