详情请点阅读全文
一、知识点 参考:https://docs.djangoproject.com/zh-hans/3.0/topics/pagination/
查询出所有省级地区的信息,显示在页面上。 1 AeroInfo.objects.filter(aParent__isnull = True )
1) 查询出所有省级地区的信息。 2) 按每页显示10条信息进行分页,默认显示第一页的信息,下面并显示出页码。 3) 点击i页链接的时候,就显示第i页的省级地区信息。 1 2 from django.core.paginator import Paginatorpaginator = Paginator(areas, 10 )
Paginator类对象的属性:
属性名
说明
num_pages
返回分页之后的总页数
page_range
返回分页后页码的列表
Paginator类对象的方法:
方法名
说明
page(self, number)
返回第number页的Page类实例对象
Page类对象的属性:
属性名
说明
number
返回当前页的页码
object_list
返回包含当前页的数据的查询集
paginator
返回对应的Paginator类对象
Page类对象的方法:
属性名
说明
has_previous
判断当前页是否有前一页
has_next
判断当前页是否有下一页
previous_page_number
返回前一页的页码
next_page_number
返回下一页的页码
二、分页实例 1)app1/models.py写地区模型类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from django.db import modelsclass AreaInfo (models.Model) : '''地址模型类''' atitle = models.CharField(verbose_name='标题' , max_length=20 ) aParent = models.ForeignKey('self' , null=True , blank=True ,on_delete=models.CASCADE) def __str__ (self) : return self.atitle def title (self) : return self.atitle title.admin_order_field = 'atitle' title.short_description = '地区名称' def parent (self) : if self.aParent is None : return '' return self.aParent.atitle parent.short_description = '父级地区名称'
2)app1/views.py写显示函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from django.shortcuts import renderfrom django.http import HttpResponsefrom app1.models import AreaInfo def index (request) : return render(request,'app1/index.html' ) from django.core.paginator import Paginator def show_areas (request) : '''分页显示地区''' areas=AreaInfo.objects.filter(aParent__isnull=True ) paginator=Paginator(areas,10 ) page=paginator.page(1 ) return render(request,'app1/show_areas.html' ,{'page' :page})
3)模板templates/app1/show_areas.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html > <html > <head > <title > 显示地区</title > </head > <body > <ul > {% for a in page %} <li > {{a.atitle}}</li > {% endfor %} </ul > </body > </html >
4)配置urls.py 1 2 3 4 5 6 7 8 9 10 11 12 from django.contrib import adminfrom django.urls import pathfrom app1 import viewsurlpatterns = [ path('index/' , views.index), path('show_upload/' ,views.show_upload), path('upload_handle/' ,views.upload_handle), path('show_areas/' ,views.show_areas), ]
显示第一页十条数据: 北京市 天津市 河北省 山西省 内蒙古自治区 辽宁省 吉林省 黑龙江省 上海市 江苏省
2.2完整的分布实例 1)模板templates/app1/show_areas.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <!DOCTYPE html> <html> <head> <title>显示地区</title> </head> <body> <ul> { { {% for area in page %} <li>{{ area.atitle }}</li> {% endfor %} </ul> { {% if page.has_previous %} <a href="/show_areas{{ page.previous_page_number }}"><上一页</a> {% endif %} { {% for pindex in page.paginator.page_range %} { {% if pindex == page.number %} {{ pindex }} {% else %} <a href="/show_areas{{ pindex }}">{{ pindex }}</a> {% endif %} {% endfor %} { {% if page.has_next %} <a href="/show_areas{{ page.next_page_number }}">下一页></a> {% endif %} </ul> </body> </html>
2)app1/views.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from django.shortcuts import renderfrom django.http import HttpResponsefrom project1.settings import MEDIA_ROOT from app1.models import PicTest,AreaInfo def index (request) : return render(request,'app1/index.html' ) from django.core.paginator import Paginator def show_areas (request,pindex) : '''分页显示地区''' areas = AreaInfo.objects.filter(aParent__isnull=True ) paginator = Paginator(areas, 10 ) if pindex == '' : pindex = 1 else : pindex = int(pindex) page = paginator.page(pindex) return render(request,'app1/show_areas.html' ,{'page' :page})
3)配置urls.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 from django.contrib import adminfrom django.urls import path,re_pathfrom app1 import viewsurlpatterns = [ path('index/' , views.index), path('show_upload/' ,views.show_upload), path('upload_handle/' ,views.upload_handle), re_path(r'show_areas(?P<pindex>\d*)' , views.show_areas), ]