Django分页器
程序员文章站
2022-10-16 12:37:31
一.分页器 实例: 所以,使用Paginator分四步: 使用任何方法,获取要展示的对象列表QuerySet; 将列表和每页个数传递给Paginator,返回一个分页对象; 调用该对象的各种方法,获取各种分页信息; 在HTML模板中,使用上面的分页信息构建分页栏。 二.使用Paginator 批量导 ......
一.分页器
分页功能是所有网页上都需要提供的功能,当要展示的条目比较多时,就需要进行分页,不但能减小数据库读取数据压力,也有利于用户浏览。 django为我们提供了一个paginator分页工具,这个类帮助我们来管理分页数据,该类存放在django/core/paginator.py它可以接收列表、元组或其他可迭代对象。
实例:
from django.core.paginator import paginator lis = ['yven','lqz','egon','hwt','lyf'] # 对lis进行分页,每页2条数据 p = paginator(lis,2) # 每页显示条目数量,显示2 print(p.per_page) # page对象 print(p.page) # 对象的个数,显示5 print(p.count) # 总共几页,显示3 print(p.num_pages) # 分页范围,返回一个可迭代对象 显示range(1,4) print(p.page_range) # 获取第一页 page1 = p.page(1) # 显示<page 1 of 3> print(page1) # 获取第一页的对象 显示['yven', 'lqz'] print(page1.object_list) page2 = p.page(2) # 当前页页码 显示2 print(page2.number) # paginator对象 print(page2.paginator) print(page2.object_list) #['egon', 'hwt'] # 判断是否有下一页 显示true print(page2.has_next()) # 判断是否有上一页 显示true print(page2.has_previous()) # 判断是否其他页 显示true print(page2.has_other_pages()) # 获取下一页页码 显示3 print(page2.next_page_number()) # 获取上一页页码 显示1 print(page2.previous_page_number())
所以,使用paginator分四步:
使用任何方法,获取要展示的对象列表queryset;
将列表和每页个数传递给paginator,返回一个分页对象;
调用该对象的各种方法,获取各种分页信息;
在html模板中,使用上面的分页信息构建分页栏。
二.使用paginator
批量导入数据
需要插入需要调数据时,大部分人会想到使用循环来插入输入,但这样会影响效率,因为每次循环都会去找到那张表,再进行插入记录,所以这时就可以使用bulk_create实现批量插入,效率会更高。
def index(request): book_list = [] for i in range(100): book_list.append(models.book(name='图书%s'%i,price=10+i)) models.book.objects.bulk_create(book_list) return httpresponse('ok')
将图书列表中的数据分页展示出来,每页3个数据
视图层:
def index(request): book_list = models.book.objects.all().order_by('id') # 每页显示3条 paginator = paginator(book_list, 3) try: # 前端返回页码 page = int(request.get.get('page')) current = paginator.page(page) # 判断总页码数是否大于9 if paginator.num_pages > 9: # 判断页码是否小于5 if page < 5: page_range = range(1, 10) elif page + 4 > paginator.num_pages: page_range = range(paginator.num_pages - 8, paginator.num_pages + 1) else: page_range = range(page - 4, page + 5) else: # 小于9页,有多少页就显示多少页 page_range=paginator.page_range except exception as e: page = 1 current = paginator.page(page) if paginator.num_pages > 9: if page < 5: print('aaa') page_range = range(1, 10) else: page_range = paginator.page_range return render(request, 'index.html', locals())
模板层
<table class="table table-hover"> <tr> <th>id</th> <th>书名</th> <th>单价</th> </tr> {% for book in current %} <tr> <td>{{ forloop.counter }}</td> <td>{{ book.name }}</td> <td>{{ book.price }}</td> </tr> {% endfor %} </table> <nav aria-label="page navigation"> <ul class="pagination"> {% if current.has_previous %} <li> <a href="/index/?page={{ current.previous_page_number }}" aria-label="previous"> <span aria-hidden="true">上一页</span> </a> </li> {% else %} <li class="disabled"> <a href="" aria-label="previous"> <span aria-hidden="true">上一页</span> </a> </li> {% endif %} {% for foo in page_range %} {% if page == foo %} <li class="active"><a href="/index/?page={{ foo }}">{{ foo }}</a></li> {% else %} <li><a href="/index/?page={{ foo }}">{{ foo }}</a></li> {% endif %} {% endfor %} {% if current.has_next %} <li> <a href="/index/?page={{ current.next_page_number }}" aria-label="next"> <span aria-hidden="true">下一页</span> </a> </li> {% else %} <li class="disabled"> <a href="" aria-label="next"> <span aria-hidden="true">下一页</span> </a> </li> {% endif %} </ul> </nav>
三.paginator对象
paginator类拥有以下方法和属性: 属性: count:对象的个数 num_pages:页面总数 page_range:基于1的页数范围迭代器 方法: paginaor.page(number):返回指定页面的对象列表
四.异常处理
在实例使用中,用户请求的页面,可能千奇百怪,这就会有可能导致异常,需要特别处理,django为我们内置了下面几个paginator相关异常。 1.exception invalidpage[source]:异常的基类,当paginator传入一个无效的页码时抛出。 2.exception pagenotaninteger[source]:当向page()提供一个不是整数的值时抛出。 3.exception emptypage[source]:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出。
推荐阅读
-
win10系统设备管理器没有端口怎么办 win10设备管理器没有端口的多种原因及解决方法
-
使用Python实现在Windows下安装Django
-
[Go] 轻量服务器框架基础TCP服务模块
-
MyBatis中使用RowBounds对查询结果集进行分页
-
实例详解django开发之settings.py中变量的全局引用
-
服务器设置指示_PHP教程
-
浅析Yii2集成富文本编辑器redactor实例教程,yii2redactor
-
详细介绍MvcPager分页控件使用的实例方法
-
不知大家遇到过这种问题么,一个层宽度设为100%,并设置背景图片,在浏览器中浏览,缩小窗口到滚动条出现,然后拖动滚动条到右侧,右侧的区域变成空白,怎么解决?_html/css_WEB-ITnose
-
为啥在服务器上面调用始终是unknown host