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 27 Python
简单分析Python中用fork()函数生成的子进程
May 04 Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 Python
python 日期操作类代码
May 05 Python
python实现复制大量文件功能
Aug 31 Python
pygame实现非图片按钮效果
Oct 29 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
浅析Python __name__ 是什么
Jul 07 Python
Python的这些库,你知道多少?
Jun 09 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
PHP insert语法详解
2008/06/07 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
php日期操作技巧小结
2016/06/25 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
js jquery数组介绍
2012/07/15 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
AngularJS入门之动画
2016/07/27 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
Python代码的打包与发布详解
2014/07/30 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python常见数据类型转换操作示例
2019/05/08 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
django rest framework serializers序列化实例
2020/05/13 Python
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
女娲补天教学反思
2014/02/05 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
学党史心得体会
2014/09/05 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
微信早安问候语
2015/11/10 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis