博客
关于我
强烈建议你试试无所不能的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

    你可能感兴趣的文章
    MyEclipse使用总结——MyEclipse去除网上复制下来的来代码带有的行号
    查看>>
    java学习笔记-设计模式20(备忘录模式)
    查看>>
    *Hdu 1026-Ignatius and the Princess I
    查看>>
    447. Number of Boomerangs
    查看>>
    【bzoj1598/Usaco2008 Mar】牛跑步——A*
    查看>>
    威斯敏斯特教堂(西敏寺)墓碑上的话(WestMinster Abbey,When I was young and free...,修身齐家治国平天下)...
    查看>>
    IDEA激活
    查看>>
    轻型的接口访问频率限制服务模型的设计与实现【转】
    查看>>
    个性化推荐系统最近一些复盘以及探索
    查看>>
    使用NEWSEQUENTIALID解决GUID聚集索引问题
    查看>>
    android系统平台显示驱动开发简要:Samsung LCD接口篇『三』
    查看>>
    telnet到RedHat Linux失败--解决办法
    查看>>
    Android LeakCanary
    查看>>
    Android LinkedList和ArrayList的区别
    查看>>
    怎样设置Android Studio的工作空间编码
    查看>>
    ajax+jsp实现三级联动下拉框
    查看>>
    Android 获取屏幕高度,宽度,状态栏高度
    查看>>
    ComboBox1获取datatable的一列
    查看>>
    SQL语句中的乘号
    查看>>
    两个指针变量可以相减
    查看>>