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)

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

<div class="pagination">
    <span class="step-links">
        {% if page.has_previous %}
            <a href="?page={{ page.previous_page_number }}">Previous</a>
        {% endif %}
        <span class="current">
            Page {{ page.number }} of {{ page.paginator.num_pages }}.
        </span>
        {% if page.has_next %}
            <a href="?page={{ page.next_page_number }}">Next</a>
        {% endif %}
    </span>
</div>
  • page.number:当前页码
  • page.paginator.num_pages:总页数
  • page.previous_page_number:上一页码
  • page.next_page_number:下一页码

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

{% block content %}

    ...

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

📌注意模版的相对路径

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值