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.(清楚优于含糊)