博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义分页
阅读量:4598 次
发布时间: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

    你可能感兴趣的文章
    如何建立合适的索引?
    查看>>
    acwing 651. 逛画展
    查看>>
    (待完成)qbxt2019.05 总结12 - 趣味题目 鹰蛋
    查看>>
    [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
    查看>>
    关于WPF程序只运行一个实例的方法
    查看>>
    游标的使用
    查看>>
    图论:点分治
    查看>>
    mysql
    查看>>
    C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)
    查看>>
    java小程序 示例
    查看>>
    前端开发在线小工具
    查看>>
    有关cookies使用方法
    查看>>
    Hadoop 使用Combiner提高Map/Reduce程序效率
    查看>>
    前言 转录组
    查看>>
    扫描图片怎么转换成文字
    查看>>
    easyui刷新渲染
    查看>>
    kindeditor 引用js架包问题
    查看>>
    POJ 1743 Musical Theme (后缀数组,求最长不重叠重复子串)(转)
    查看>>
    js中的delete
    查看>>
    centos 安装jenkins
    查看>>