博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义分页
阅读量:4606 次
发布时间:2019-06-09

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

 
"""分页组件使用示例:    1) 先取出所有数据USER_LIST    2) 实例化:        obj = Pagination(request.GET.get('page',1), len(USER_LIST), request)    3) 对所有数据列表切片(即切出一页数据):        page_user_list = USER_LIST[obj.start:obj.end]    4) 返回给页面:        return render(request,'index.html',{'users': page_user_list, 'obj': obj})    5) 模板页面通过 {
{ obj.page_html|safe }} 渲染页码"""
class Pagination(object):    # 第一步  初始化页面    def __init__(self,current_page_num,all_count,request,per_page_num=5,pager_count=11):        """        封装分页相关数据        :param current_page_num: 当前访问页的数字        :param all_count:    分页数据中的数据总条数        :param per_page_num: 每页显示的数据条数        :param pager_count:  最多显示的页码个数        """        try:            current_page_num = int(current_page_num)        except Exception as e:            current_page_num = 1        if current_page_num <1:            current_page_num = 1        self.current_page_num = current_page_num        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)  # 5        # 保存搜索条件        import copy        self.params=copy.deepcopy(request.GET) # {"a":"1","b":"2"}    @property  #属性方法  在外部views里 切片的时候不用加括号  直接调用 start就可以    def start(self):        return (self.current_page_num - 1) * self.per_page_num    @property    def end(self):        return self.current_page_num * 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_num <= self.pager_count_half:                pager_start = 1                pager_end = self.pager_count + 1            # 当前页大于5            else:                # 页码翻到最后                if (self.current_page_num + self.pager_count_half) > self.all_pager:                    pager_start = self.all_pager - self.pager_count + 1                    pager_end = self.all_pager + 1                else:                    pager_start = self.current_page_num - self.pager_count_half                    pager_end = self.current_page_num + self.pager_count_half + 1        page_html_list = []        first_page = '
  • 首页
  • ' % (1,) page_html_list.append(first_page) if self.current_page_num <= 1: prev_page = '
  • 上一页
  • ' else: prev_page = '
  • 上一页
  • ' % (self.current_page_num - 1,) page_html_list.append(prev_page) #self.params=copy.deepcopy(request.GET) # {"a":"1","b":"2"} # 主要的for循环 for i in range(pager_start, pager_end): self.params["page"]=i if i == self.current_page_num: temp = '
  • %s
  • ' %(self.params.urlencode(),i) else: temp = '
  • %s
  • ' % (self.params.urlencode(),i,) page_html_list.append(temp) if self.current_page_num >= self.all_pager: next_page = '
  • 下一页
  • ' else: next_page = '
  • 下一页
  • ' % (self.current_page_num + 1,) page_html_list.append(next_page) last_page = '
  • 尾页
  • ' % (self.all_pager,) page_html_list.append(last_page) return ''.join(page_html_list)

     

    转载于:https://www.cnblogs.com/kenD/p/10008000.html

    你可能感兴趣的文章
    js控制图片等比例缩放
    查看>>
    Java高级开发工程师面试考纲
    查看>>
    FreeMarker表达式
    查看>>
    Debian9.2 下使用vnstat查看服务器带宽流量统计
    查看>>
    NGINX + PHP-FPM 502
    查看>>
    mysql数据备份与恢复
    查看>>
    Openstack API常用命令
    查看>>
    OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
    查看>>
    C语言 喝汽水问题
    查看>>
    LINUX中搭建DNS服务器,实现正向、反向以及访问不同DNS解析
    查看>>
    SCCM2012 R2实战系列之十:解决WDS服务无法启动问题(错误1067:进程意外终止)...
    查看>>
    ubuntu 下安装 mysql
    查看>>
    关于k-means聚类算法的matlab实现
    查看>>
    Git分支2
    查看>>
    一键安装Gitlab后的备份、迁移与恢复
    查看>>
    因为本人工作繁忙,精力有限,本博客停止更新。有兴趣的博友可以关注我在CSDN上的主博客...
    查看>>
    SQL server查看触发器是否被禁用
    查看>>
    [C++基础]在构造函数内部调用构造函数
    查看>>
    跟随我在oracle学习php(8)
    查看>>
    Spring 3.1.0 Hibernate 3.0 Eclipse Spring WEB例子
    查看>>