44. Django 2.1.7 分页 Paginator

网友投稿 2925 2022-11-21

44. Django 2.1.7 分页 Paginator

44. Django 2.1.7 分页 Paginator

参考文献

​​2, 3, 4]。方法page(m):返回Page类实例对象,表示第m页的数据,下标以1开始。

Page类实例对象

调用Paginator对象的page()方法返回Page对象,不需要手动构造。属性object_list:返回当前页对象的列表。属性number:返回当前是第几页,从1开始。属性paginator:当前页对应的Paginator对象。方法has_next():如果有下一页返回True。方法has_previous():如果有上一页返回True。方法len():返回当前页面对象的个数。

示例 - 使用交互模式使用一下分页功能

# 引入PaginatorIn [37]: from django.core.paginator import Paginator# 创建四个数据的listIn [38]: objects = ['john', 'paul', 'george', 'ringo']# 设置分页显示条数为2In [39]: p = Paginator(objects, 2)# 查看对象总数In [40]: p.countOut[40]: 4# 返回页面总数In [41]: p.num_pagesOut[41]: 2In [42]: type(p.page_range)Out[42]: range# 返回页码列表,从1开始,例如[1, 2, 3, 4]In [43]: p.page_rangeOut[43]: range(1, 3)# 可以看到页码只有 1 ,2In [45]: for item in p.page_range: ...: print(item) ...: 12# 查看页码1的数据In [46]: page1 = p.page(1)In [47]: page1Out[47]: In [48]: page1.object_listOut[48]: ['john', 'paul']# 查看页码2的数据In [49]: page2 = p.page(2)In [50]: page2.object_listOut[50]: ['george', 'ringo']# 页码2,如果有下一页返回TrueIn [51]: page2.has_next()Out[51]: False# 页码2,如果有上一页返回TrueIn [52]: page2.has_previous()Out[52]: TrueIn [53]: page2.has_other_pages()Out[53]: TrueIn [6]: page2.next_page_number()---------------------------------------------------------------------------EmptyPage Traceback (most recent call last)...EmptyPage: 本页结果为空# 页码2,上一页的页码In [7]: page2.previous_page_number()Out[7]: 1# The 1-based index of the first item on this pageIn [8]: page2.start_index()Out[8]: 3# The 1-based index of the last item on this pageIn [9]: page2.end_index()Out[9]: 4

在视图中使用 Paginator

1)在assetinfo/views.py文件中创建视图page_test。

from assetinfo.models import ServerInfofrom django.core.paginator import Paginatordef page_test(request): #查询所有的服务器信息 server_list = ServerInfo.objects.all() #将地区信息按一页2条进行分页 p = Paginator(server_list, 2) #获取第1页的数据 page_list = p.page(1).object_list #将当前页码、当前页的数据、页码信息传递到模板中 return render(request, 'assetinfo/page_test.html', {'page_list': page_list})

2)在assetinfo/urls.py文件中配置url。

urlpatterns = [ # ex:/assetinfo/page_test path('page_test/', views.page_test, name='page_test'),]

3)在templates/assetinfo/目录下创建page_test.html模板文件。

分页 显示第一页的服务器信息:

    {%for item in page_list%}
  • {{forloop.counter}}--{{item}}--{{ item.server_intranet_ip }}--{{ item.server_internet_ip }}
  • {%endfor%}

4)运行服务器,在浏览器中输入如下网址:page_test(request): #设置接收页码 page_Index = request.GET.get('page') #查询所有的服务器信息 server_list = ServerInfo.objects.all() #将地区信息按一页2条进行分页 p = Paginator(server_list, 2) #获取第page_Index页的数据 server_page_list = p.get_page(page_Index) #将当前页码、当前页的数据、页码信息传递到模板中 return render(request, 'assetinfo/page_test.html', {'server_page_list': server_page_list})

8)在templates/assetinfo/目录下修改page_test.html模板文件。

分页

    {%for item in server_page_list%}
  • {{forloop.counter}}--{{item}}--{{ item.server_intranet_ip }}--{{ item.server_internet_ip }}
  • {%endfor%}
{% if server_page_list.has_previous %} « first previous {% endif %} Page {{ server_page_list.number }} of {{ server_page_list.paginator.num_pages }}. {% if server_page_list.has_next %} next last » {% endif %}

9)在浏览器访问如下:http://127.0.0.1:8000/assetinfo/page_test?page=1

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Git 常用命令集
下一篇:Maven 中的常见插件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~