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的汉字转GBK码实现代码
Feb 19 Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 Python
python Opencv将图片转为字符画
Feb 19 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
python实现弹跳小球
May 13 Python
python实现简单俄罗斯方块
Mar 13 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
如何解决python多种版本冲突问题
Oct 13 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
基于Python实现nc批量转tif格式
Aug 14 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
javascript 闭包详解
2015/02/15 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
详解Python循环作用域与闭包
2019/03/21 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
Python爬取梨视频的示例
2021/01/29 Python
python FTP编程基础入门
2021/02/27 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
物流仓储实习自我鉴定
2013/09/25 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
小学生家长评语集锦
2014/01/30 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
企业新年寄语
2014/04/04 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
庆祝国庆节演讲稿2014
2014/09/19 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
学生会副主席竞选稿
2015/11/19 职场文书