Django 分页器pagintor的使用
# Django 分页器的使用pagintor #
>在视图文件下views.py
from django.shortcuts import render, HttpResponse from slyajax.models import * from django.core.paginator import Paginator, EmptyPage #调用Paginator方法 def pags(request): goods_list = Goods.objects.all() #得到QUERYSET列表。 paginator = Paginator(goods_list, 4) #使用Paginator方法得到paginator对象 ###### paginator对象的方法 ######### #print(paginator.count) #显示所有数据条数 #print(paginator.page_range) #分页器的页数范围 #print(paginator.num_pages) #分液器总页数 current_page_num = int(request.GET.get('page', 1)) #获得请求的页数,默认值为1,当GET没有值时显示第一页的内容。 #以下是页面显示效果:,当页数大于11页数时,将显示当前页的前5页和后5页的页码,如果选择的页码小于5时,显示的页码为1至11页,如果页码加5大于最大页码数时,显示最后11页的页码。 如果总页数小于11页时就正常显示页码。 if paginator.num_pages > 11: if current_page_num-5 < 1: #当前页-5如果小于1的话,说明页码已经是小于5的,那么页码范围就显示前11页数。 #这里也可以写成 if current_page_num < 6 。这样显得更容易理解。 current_range = range(1, 11) elif current_page_num+5 > paginator.num_pages: #当前页码+5大于最大页码时,说明已经到达最后的5页了。那么页码范围就显示后11页数。 #这里也可以写成 elif current_page_num > paginator.num_pages-5 。容易理解。 current_range = range(paginator.num_pages-10, paginator.num_pages+1) else: current_range = range(current_page_num-5, current_page_num+6) #显示当前页的前五和后五页码数。 else: current_range = paginator.page_range #否则正常显示页码数。 try: current_page = paginator.page(current_page_num) #当页码超出范围时,会抛出异常。 # page1 = paginator.page(1) # print(page1.object_list) # for i in page1: # print(i) except EmptyPage as e: #异常的解决方案为当前页码内容显示为第一页。 current_page = paginator.page(1) return render(request, 'pags.html', locals()) ####批量对数据库添加数据#### # goods_list = [] # for i in range(100): # goods = Goods(name='goods%s'%i, price=i*i) # goods_list.append(goods) # Goods.objects.bulk_create(goods_list)
####HTML页面的代码为#### <body> <ul> {% for goods in current_page %} <li>{{ goods.name }} | {{ goods.price }}</li> {% endfor %} </ul> <nav aria-label="Page navigation"> <ul class="pagination"> ##这里是当页面达到最前页时,向上按钮不可用disabled。这里使用has_previous来获取当前页是否有前页(返回值为布尔型),使用previous_page_number来获取前一页的的页码数。### {% if current_page.has_previous %} <li><a href="?page={{ current_page.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 page_nums in current_range %} #获得页码数的显示范围 {% if current_page_num == page_nums %} #当前显示页面的页码设置为active。 <li class="active"><a href="?page={{ page_nums }}">{{ page_nums }}</a></li> {% else %} <li><a href="?page={{ page_nums }}">{{ page_nums }}</a></li> {% endif %} {% endfor %} #这里是下一页按钮的设置,使用has_next来获得是否有下一页,用next_page_number来获取下一页的页码数。 {% if current_page.has_next %} <li><a href="?page={{ current_page.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> </body>