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处理圆角图片、圆形图片的例子
Apr 25 Python
python获取图片颜色信息的方法
Mar 18 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python多线程编程(五):死锁的形成
Apr 05 Python
利用Python实现网络测试的脚本分享
May 26 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
django实现用户登陆功能详解
Dec 11 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
获取python文件扩展名和文件名方法
Feb 02 Python
python实现SOM算法
Feb 23 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
python pytest进阶之fixture详解
Jun 27 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Python matplotlib多个子图绘制整合
Python之matplotlib绘制折线图
Python之matplotlib绘制饼图
Python线程池与GIL全局锁实现抽奖小案例
Python之Matplotlib绘制热力图和面积图
Python matplotlib绘制雷达图
You might like
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
php将html转为图片的实现方法
2017/05/19 PHP
php DES加密算法实例分析
2019/09/18 PHP
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
简单理解Python中基于生成器的状态机
2015/04/13 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python对象属性自动更新操作示例
2018/06/15 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
python绘制彩虹图
2019/12/16 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
事务机电主管工作职责
2014/02/25 职场文书
啤酒节策划方案
2014/05/28 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python