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的@property装饰器的用法
Apr 28 Python
python实现在sqlite动态创建表的方法
May 08 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
解读Django框架中的低层次缓存API
Jul 24 Python
Python实现基本线性数据结构
Aug 22 Python
Python内建模块struct实例详解
Feb 02 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
如何基于Python批量下载音乐
Nov 11 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
php 生成文字png图片的代码
2011/04/17 PHP
PHP 第一节 php简介
2012/04/28 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
php中的依赖注入实例详解
2019/08/14 PHP
理解Javascript_10_对象模型
2010/10/16 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Python+django实现简单的文件上传
2016/08/17 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
联想中国官方商城:Lenovo China
2017/10/18 全球购物
局域网标准
2016/09/10 面试题
造价工程师个人求职信
2013/09/21 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
有创意的广告词
2014/03/18 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
校庆活动策划方案
2014/06/05 职场文书
JavaScript实现简单的音乐播放器
2022/08/14 Javascript