详解Django的 paginate_by() 函数:指定每页显示的数量

  • Post category:Python

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()函数的使用方法和实例说明,希望对你有所帮助。