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使用socket进行简单网络连接的方法
Apr 29 Python
python re模块findall()函数实例解析
Jan 19 Python
python实现装饰器、描述符
Feb 28 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
把pandas转换int型为str型的方法
Jan 29 Python
python简单区块链模拟详解
Jul 03 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
Python根据服务获取端口号的方法
Sep 25 Python
使用python实现kNN分类算法
Oct 16 Python
Python小白垃圾回收机制入门
Jun 09 Python
python for循环赋值问题
Jun 03 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
PHP时间戳使用实例代码
2008/06/07 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
php中yii框架实例用法
2020/12/22 PHP
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
js定时器实例分享
2016/12/20 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
JS实现瀑布流布局
2017/10/21 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python序列化pickle模块使用详解
2020/03/05 Python
详解Python 最短匹配模式
2020/07/29 Python
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
《植物妈妈有办法》教学反思
2014/02/25 职场文书
护士毕业实习感言
2014/03/05 职场文书
施工员岗位职责
2014/03/16 职场文书
体操比赛口号
2014/06/10 职场文书
北京爱情故事观后感
2015/06/12 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers