page_range()
函数是 Django 分页器 Paginator 中的一个方法,用于获取当前页面周围的一定数量的页面范围。
该函数可以接受一个参数 num_pages
,表示总共的页面数,以及一个参数 current_page
,表示当前的页码。默认情况下,该函数得到当前页码前后两个数字,但如果页面太靠近开头或结尾,则无法得到两个页码。在这种情况下,该函数只返回 nearby_pages 个页码。
该函数的用法如下所示:
def page_range(num_pages, current_page, nearby_pages=2):
if num_pages <= (nearby_pages*2 + 1):
return range(1, num_pages+1)
elif current_page <= nearby_pages+1 or num_pages-current_page <= nearby_pages:
return range(1, nearby_pages*2+2)
else:
return range(current_page-nearby_pages, current_page+nearby_pages+1)
例如,我们在一个博客网站中使用了分页器,每页显示10篇文章,总共有100篇文章。当用户浏览第6页时,需要展示当前页面周围的5个页面范围,即2到8页。此时,可以通过以下方式获取页面范围:
from django.core.paginator import Paginator
from django.shortcuts import render
def blog_list(request):
blog_list = Blog.objects.all()
paginator = Paginator(blog_list, 10)
current_page = request.GET.get('page', 1) # 获取当前页码
page_range = paginator.page_range(current_page=current_page) # 获取页面范围
page = paginator.get_page(current_page)
context = {
'page': page,
'page_range': page_range,
}
return render(request, 'blog_list.html', context)
又例如,我们在一个电商网站中使用了分页器,每页显示20个商品,总共有200个商品。当用户浏览第15页时,需要展示当前页面周围的3个页面范围,即12到18页。此时,可以通过以下方式获取页面范围:
from django.core.paginator import Paginator
def product_list(request):
product_list = Product.objects.all()
paginator = Paginator(product_list, 20)
current_page = request.GET.get('page', 1) # 获取当前页码
page_range = paginator.page_range(current_page=current_page, nearby_pages=3) # 获取页面范围
page = paginator.get_page(current_page)
context = {
'page': page,
'page_range': page_range,
}
return render(request, 'product_list.html', context)
无论是博客列表页面还是商品列表页面,通过获取当前页面周围的页面范围,用户都可以更加方便地进行页面切换,提高了网站的用户体验。