https://docs.djangoproject.com/zh-hans/2.1/topics/pagination/
Django提供了数据分页的类,这些类被定义在django/core/paginator.py中。
类Paginator用于对列进行一页n条数据的分页运算。
类Page用于表示第m页的数据。
方法_init_(列表,int):返回分页对象,第一个参数为列表数据,第二个参数为每页数据的条数。
属性count:返回对象总数。
属性num_pages:返回页面总数。
属性page_range:返回页码列表,从1开始,例如[1, 2, 3, 4]。
方法page(m):返回Page类实例对象,表示第m页的数据,下标以1开始。
调用Paginator对象的page()方法返回Page对象,不需要手动构造。
属性object_list:返回当前页对象的列表。
属性number:返回当前是第几页,从1开始。
属性paginator:当前页对应的Paginator对象。
方法has_next():如果有下一页返回True。
方法has_previous():如果有上一页返回True。
方法len():返回当前页面对象的个数。
1)在assetinfo/views.py文件中创建视图page_test。
from assetinfo.models import ServerInfo from django.core.paginator import Paginator def 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模板文件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分页</title> </head> <body> 显示第一页的服务器信息:<br> <ul> {%for item in page_list%} <li>{{forloop.counter}}--{{item}}--{{ item.server_intranet_ip }}--{{ item.server_internet_ip }}</li> {%endfor%} </ul> </body> </html>4)运行服务器,在浏览器中输入如下网址:http://127.0.0.1:8000/assetinfo/page_test/
这是写第一页的查询数据,下面来看看写第二页的数据。
5)在assetinfo/views.py文件中修改视图page_test。
6)在浏览器刷新如下:
下面来设置访问的页码来改变查询的数据,并查询显示页码。
7)在assetinfo/views.py文件中修改视图page_test。
def 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模板文件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分页</title> </head> <body> <ul> {%for item in server_page_list%} <li>{{forloop.counter}}--{{item}}--{{ item.server_intranet_ip }}--{{ item.server_internet_ip }}</li> {%endfor%} </ul> {% if server_page_list.has_previous %} <a href="?page=1">« first</a> <a href="?page={{ server_page_list.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ server_page_list.number }} of {{ server_page_list.paginator.num_pages }}. </span> {% if server_page_list.has_next %} <a href="?page={{ server_page_list.next_page_number }}">next</a> <a href="?page={{ server_page_list.paginator.num_pages }}">last »</a> {% endif %} </body> </html>9)在浏览器访问如下:http://127.0.0.1:8000/assetinfo/page_test?page=1
点击查询下一页。