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中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
自己使用总结Python程序代码片段
Jun 02 Python
Python选课系统开发程序
Sep 02 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
python实现公司年会抽奖程序
Jan 22 Python
Python进阶之@property动态属性的实现
Apr 01 Python
python实现证件照换底功能
Aug 20 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
Python排序函数的使用方法详解
Dec 11 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
Python进阶-函数默认参数(详解)
2017/05/18 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
python实现聊天小程序
2018/03/13 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
请说出几个常用的异常类
2013/01/08 面试题
端午节粽子促销活动方案
2014/02/02 职场文书
教师自我反思材料
2014/02/14 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
家长写给孩子的评语
2014/04/18 职场文书
支部组织生活会方案
2014/06/10 职场文书
验房委托书
2014/08/30 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
Nginx四层负载均衡的配置指南
2021/06/11 Servers
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
基于docker安装zabbix的详细教程
2022/06/05 Servers