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中有自带的分页器模块 但是书写起来很麻烦并且功能太简单
所以我们自己想法和设法的写自定义分页器

上述推导代码你无需掌握 只需要知道内部逻辑即可

我们基于上述的思路 已经封装好了我们自己的自定义分页器 
之后需要使用直接拷贝即可

 

posted @ 2020-10-20 21:40  Οo白麒麟оΟ  阅读(65)  评论(0编辑  收藏  举报