Django的内置分页类

from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

创建分页对象,paginator = Paginator(object_list,3),每页3条数据

获取页码,request.GET.get('page')

更新当前需要展示的数据,posts = paginator.page(page)

如果page不是整数(小于1),展示第一页,posts = paginator.page(1)

如果page大于总页数,展示最后一页,posts = paginator.page(paginator.num_pages)

View代码片段如下:

from django.shortcuts import render, get_object_or_404
from .models import Post
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

def post_list(request):
    object_list = Post.published.all()
    paginator = Paginator(object_list,3)
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)

    template = "blog/post/list.html"
    context = {
        'page':page,
        "posts":posts,
    }
    return render(request,template,context)

创建一个模板来显示分页器,以便它可以包含在任何使用分页的模板中。

  • page.number:当前页码
  • page.paginator.num_pages:总页数
  • page.previous_page_number:上一页码
  • page.next_page_number:下一页码

在需要展示分页的模版中调用

{% block content %}

    ...

    {% include "blog/pagination.html" with page=posts %}
{% endblock %}

注意模版的相对路径

你可能感兴趣的:(django,python,后端)