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 (2)
Oct 31 Python
Python中的自省(反射)详解
Jun 02 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
Django的models模型的具体使用
Jul 15 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
一个ftp类(ini.php)
2006/10/09 PHP
jquery 插件学习(二)
2012/08/06 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
2014年关于两会精神的心得体会
2014/03/17 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
中小企业员工手册范本
2015/05/14 职场文书
机关工会工作总结2015
2015/05/26 职场文书
大队委员竞选稿
2015/11/20 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python