Django中的paginate_by()函数是Paginator类中的一个方法,它的作用是将查询结果集分页展示。下面详细讲述它的使用方法。
一、使用方法
1.首先,在views.py中导入Paginator和PageNotAnInteger,以及EmptyPage:
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
2.接着,在视图函数中实例化一个Paginator类:
object_list = [......] #查询结果集
paginator = Paginator(object_list, per_page)
参数说明:
- object_list:查询结果集,即需要分页的数据列表;
- per_page:每页显示的记录数。
3.在视图函数中获取前端传来的页码:
page = request.GET.get('page')
4.对获取到的页码进行处理:
try:
object_list = paginator.page(page)
except PageNotAnInteger:
object_list = paginator.page(1)
except EmptyPage:
object_list = paginator.page(paginator.num_pages)
5.最后,将分页后的结果返回给前端:
return render(request, 'index.html', {'object_list': object_list})
二、实例说明
以下是两个实例,分别演示了查询用户列表和文章列表并进行分页展示。
1.查询用户列表
def user_list(request):
user_list = User.objects.all()
paginator = Paginator(user_list, 10)
page = request.GET.get('page')
try:
users = paginator.page(page)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
return render(request, 'user_list.html', {'users': users})
2.查询文章列表
def post_list(request):
post_list = Post.objects.all()
paginator = Paginator(post_list, 8) #每页显示8篇文章
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'post_list.html', {'posts': posts})
以上就是paginate_by()函数的使用方法和实例说明,希望对你有所帮助。