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处理cookie详解
Feb 07 Python
给Python入门者的一些编程建议
Jun 15 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
浅析Git版本控制器使用
Dec 10 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
pandas object格式转float64格式的方法
Apr 10 Python
python制作抖音代码舞
Apr 07 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
超级强大的表单验证
2006/06/26 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
python实现数通设备端口监控示例
2014/04/02 Python
python获取当前日期和时间的方法
2015/04/30 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python+tkinter实现学生管理系统
2019/08/20 Python
python框架django项目部署相关知识详解
2019/11/04 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
幼儿园运动会加油词
2014/02/14 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
买房子个人收入证明
2014/10/12 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
体育教师教学随笔
2015/08/15 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
导游词之峨眉山
2019/12/16 职场文书