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中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
基于python OpenCV实现动态人脸检测
May 25 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
django实现类似触发器的功能
Nov 15 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
python环境下安装opencv库的方法
Mar 05 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
python中append函数用法讲解
Dec 11 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
PHP学习之数组的定义和填充
2011/04/17 PHP
PHP多文件上传类实例
2015/03/07 PHP
php简单的上传类分享
2016/05/15 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
jquery动态添加删除div 具体实现
2013/07/20 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现的系统实用log类实例
2015/06/30 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
手把手教你python实现SVM算法
2017/12/27 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
通过实例解析python and和or使用方法
2020/11/14 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
施工安全汇报材料
2014/08/17 职场文书
质量整改报告范文
2014/11/08 职场文书
廉政承诺书
2015/01/19 职场文书
项目建议书
2015/02/04 职场文书
祝酒词范文
2015/08/12 职场文书
数据设计之权限的实现
2022/08/05 MySQL