You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用pagination的num_pages属性无法获取总页数问题排查

Django分页num_pages属性无法获取总页数的解决方法

核心错误原因

90%以上的该问题都是属性调用对象搞错:num_pages是DjangoPaginator分页器实例的内置属性,不是单页Page对象的属性,直接在Page对象上调用该属性自然无法拿到值。
其余常见诱因包括分页器实例化顺序错误、模板上下文传参缺失、传入分页器的数据集非法三类。

正确写法示例

视图层代码

from django.core.paginator import Paginator
from django.shortcuts import render
from .models import Post  # 替换为你自己的业务模型

def post_list(request):
    # 1. 拿到全量待分页数据,不要提前做切片操作
    post_list = Post.objects.all().order_by('-create_time')
    # 2. 实例化分页器,传入数据集和单页展示条数
    paginator = Paginator(post_list, per_page=15)
    # 3. 获取前端传递的当前页码
    page_num = request.GET.get('page', 1)
    # 4. 获取当前页对应的Page对象
    page_obj = paginator.get_page(page_num)
    
    # 正确取总页数的方式:从Paginator实例上调用属性
    total_page_count = paginator.num_pages

    # 传值给模板时,需要把paginator实例或者提前取好的总页数传入上下文
    return render(request, 'post_list.html', {
        'page_obj': page_obj,
        'paginator': paginator,
        'total_page_count': total_page_count
    })

模板层代码

<!-- 正确写法1:通过传入的paginator实例取总页数 -->
<p>总页数:{{ paginator.num_pages }}</p>

<!-- 正确写法2:通过单独传入的总页数变量取值 -->
<p>总页数:{{ total_page_count }}</p>

<!-- 错误写法示例:Page对象没有num_pages属性,该写法无效 -->
<!-- <p>总页数:{{ page_obj.num_pages }}</p> -->

排查清单

按以下顺序核对代码即可快速定位问题:

  • 核对属性调用主体:确认num_pages是绑定在Paginator实例上调用,而非Page实例上
  • 核对实例化顺序:必须先完成Paginator实例的创建,再调用num_pages属性,不要写反执行顺序
  • 核对传入数据集:传给Paginator的第一个参数不能是None、提前切片的查询集、非可迭代对象
  • 核对模板传参:模板中使用时,确认对应变量已经通过视图上下文传入,不要直接渲染未定义的num_pages变量
  • 核对组件类型:如果使用DRF分页、第三方分页插件,需核对对应组件的总页数属性命名,部分组件不会沿用原生Django的num_pages属性名

内容的提问来源于stack exchange,提问作者KS Bhale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:18:20