• Django与分页器


    分页器组件介绍

    1 项目数据量大了以后,比如涉及到分页,一页一页的加载显示
    2 django中分页器组件,把分页常用的东西,封装到一个类中
    3 实例化得到一个对象,对象里有属性和方法

    分页器简单使用

    #######1 Paginator对象的属性和方法
        book_list=models.Book.objects.all()
        # 实例化得到对象
        # 第一个参数:要分页的数据,book_list
        # 第二个参数:没有条数
        paginator=Paginator(book_list,10)
        # Paginator对象的属性和方法
        print(paginator.per_page) # 每页显示的条数
        print(paginator.count) # 总条数,总共要分页多少条数据
        print(paginator.num_pages) # 总页码数
        print(paginator.page_range) # 页码的生成器 [1,2,3,4,5,6,7,8,9,10]
    
        
        
    ######3 Page对象的属性和方法
        # Page类 的对象
        page=paginator.page(2)   #  第一页的对象
        # 每一页的对象,属性和方法
        print(page.has_next())      # 有没有下一页
        print(page.next_page_number()) # 下一页页码
        print(page.has_previous())  # 是否有上一页
        print(page.previous_page_number()) # 上一页页面 (当前页如果是第一页,没有上一页)
        print(page.object_list)            # 当前页的所有数据
        print(page.number)           # 当前页的页码数
        
        
    ##### 4 表模型中默认以id排序
        class Meta:
            ordering=('id', ) # 默认以id排序

    自定义分页器

    """
    总数据100 每页展示10 需要10
    总数据101 每页展示10 需要11
    总数据99 每页展示10  需要10
    
    如何通过代码动态的计算出到底需要多少页?
    
    
    在制作页码个数的时候 一般情况下都是奇数个        符合中国人对称美的标准
    """
    '''
    # 分页
    book_list = models.Book.objects.all()
    
    # 想访问哪一页
    current_page = request.GET.get('page', 1)  # 如果获取不到当前页码 就展示第一页
    # 数据类型转换
    try:
        current_page = int(current_page)
    except Exception:
        current_page = 1
    # 每页展示多少条
    per_page_num = 10
    # 起始位置
    start_page = (current_page - 1) * per_page_num
    # 终止位置
    end_page = current_page * per_page_num
    
    # 计算出到底需要多少页
    all_count = book_list.count()#当前数据的总条数
    #余数 多少页
    page_count, more = divmod(all_count, per_page_num)#总条数 每页多少条
    if more:
        page_count += 1
    
    page_html = ''
    xxx = current_page
    if current_page < 6:
        current_page = 6
    for i in range(current_page - 5, current_page + 6):
        if xxx == i:
            page_html += '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i)
        else:
            page_html += '<li><a href="?page=%s">%s</a></li>' % (i, i)
    
    book_queryset = book_list[start_page:end_page]
    '''
    """
    django中有自带的分页器模块 但是书写起来很麻烦并且功能太简单
    所以我们自己想法和设法的写自定义分页器
    
    上述推导代码你无需掌握 只需要知道内部逻辑即可
    
    我们基于上述的思路 已经封装好了我们自己的自定义分页器 
    之后需要使用直接拷贝即可
    每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
  • 相关阅读:
    linux7系统进入单用户模式
    GoAccess日志分析工具
    yum总结
    分布式文件系统---GlusterFS
    【centos7】添加开机启动服务/脚本
    centos 7 服务初始化
    chrony软件
    [USACO4.1]麦香牛块Beef McNuggets 题解报告
    组合数的几种计算方法
    【ZJOI2005】沼泽鳄鱼 题解报告
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13849221.html
Copyright © 2020-2023  润新知