博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django分页器应用
阅读量:6871 次
发布时间:2019-06-26

本文共 3597 字,大约阅读时间需要 11 分钟。

先保存成一个文件

class Pagination(object):    def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):        """        封装分页相关数据        :param current_page: 当前页        :param all_count:    数据库中的数据总条数        :param per_page_num: 每页显示的数据条数        :param pager_count:  最多显示的页码个数        用法:        queryset = model.objects.all()        page_obj = Pagination(current_page,all_count)        page_data = queryset[page_obj.start:page_obj.end]        获取数据用page_data而不再使用原始的queryset        获取前端分页样式用page_obj.page_html        """        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('''                    
''') return ''.join(page_html_list)

使用:

后端:

book_list = models.Book2.objects.all()# 数据总条数all_count = book_list.count()# 当前页current_page = request.GET.get('page',1)# 示例一个分页器对象page_obj = my_page.Pagination(current_page=current_page,all_count=all_count)# 对总数据进行切片page_queryset = book_list[page_obj.start:page_obj.end]

前端模板:

{
{ page_obj.page_html|safe }} # 帮你渲染的是带有bootstrap样式的分页器

 

转载于:https://www.cnblogs.com/xufengfan/p/11026058.html

你可能感兴趣的文章
RPM的使用
查看>>
我的友情链接
查看>>
lvs
查看>>
原型图设计软件
查看>>
setTimeout和setIntelval的区别
查看>>
[C#]通过方法获得游戏人数和玩家姓名
查看>>
How to rotate a bitmap
查看>>
spring常见注解
查看>>
我的友情链接
查看>>
Linux 磁盘分区
查看>>
Javascript创建对象的7种模式
查看>>
linux 系统端口转发
查看>>
dis ospf peer 命令注解
查看>>
字典,函数
查看>>
Linux监控平台——搭建zabbix监控平台
查看>>
linux第11单元 基础网络
查看>>
linuxshell介绍
查看>>
centos6和centos7区别有哪些
查看>>
maven pom进阶教程 - 生成可执行的jar
查看>>
解析煎蛋图片
查看>>