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

本文共 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

    你可能感兴趣的文章
    14.typescript-类与接口
    查看>>
    js学习(精华帖)
    查看>>
    和小哥哥一起刷洛谷(1)
    查看>>
    分享squid缓存服务器配置-之conf配置文件的详细介绍
    查看>>
    jQuery教程详解(一)
    查看>>
    jquery对id中含有特殊字符的转义处理
    查看>>
    DP学习之路(1) 01背包
    查看>>
    获取元素样式信息于三中获取方式的区别
    查看>>
    测试主要环节
    查看>>
    08-17工作总结
    查看>>
    遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
    查看>>
    基本高精度模板
    查看>>
    SqlBulkCopy大批量导入数据
    查看>>
    Windows Workflow Foundation 入门
    查看>>
    chrome(谷歌浏览器)“无法从该网站添加应用、扩展程序和用户脚本”问题
    查看>>
    HTTP协议 (四) 缓存
    查看>>
    python学习之random
    查看>>
    使用onclick跳转到其他页面/跳转到指定url
    查看>>
    【转载】测试计划模板
    查看>>
    pandas 修改指定列中所有内容
    查看>>