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

    你可能感兴趣的文章
    Mac软件下载备忘
    查看>>
    java 泛型初探
    查看>>
    Golang安装包go get使用代理
    查看>>
    在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
    查看>>
    就是一个表格
    查看>>
    CakePHP 2.x CookBook 中文版 第三章 入门 之 CakePHP 的结构
    查看>>
    Objective-C的算术表达式 .
    查看>>
    gcc编译C++程序
    查看>>
    linux中nfs的自动挂载
    查看>>
    找回使用Eclipse删除的文件
    查看>>
    rabbitmq 消息系统 消息队列
    查看>>
    Intellij IDEA神器居然还有这些小技巧
    查看>>
    HBase基本原理
    查看>>
    php使用qr生成二维码
    查看>>
    集成spring3、hibernate4、junit
    查看>>
    eclipse常用快捷键
    查看>>
    URL与ASCII
    查看>>
    Jetty9安装部署
    查看>>
    OpenGL的视图变换
    查看>>
    Redis.conf 说明
    查看>>