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

Django Paginator分页器底部页码按钮未正常显示问题排查

问题定位

分页页码无法渲染的核心原因是视图函数未将paginator实例传入模板上下文:

  • 你在视图中调用render时,仅向模板传递了当前分页的Page对象(即你命名为list的变量),没有传递Paginator类的实例
  • 模板中{% for page in paginator.page_range %}循环执行时,找不到paginator这个变量,循环直接终止,因此不会渲染任何页码按钮
修复方法

1. 修改视图传参

在视图的render上下文参数中补充paginator实例即可,修改最后一行返回代码:

# 原代码
# return render(request, 'projects/projects.html',{'list': obj})

# 修改后
return render(request, 'projects/projects.html',{
    'list': obj,
    'paginator': paginator
})

补充说明:Django的Page对象本身自带paginator属性指向关联的分页器实例,如果你不想额外传参,也可以直接把模板里的循环条件改成{% for page in list.paginator.page_range %},但显式传递paginator的代码可读性更高,更推荐使用。

2. 可选功能补全(避坑优化)

你当前模板里的上一页、下一页按钮写死了href="#",没有实际跳转逻辑,可以结合Page对象自带的方法补全完整分页交互,参考代码如下:

<div class="pagination">
  <ul class="container">
    <!-- 上一页按钮 -->
    {% if list.has_previous %}
    <li><a href="?page={{ list.previous_page_number }}" class="btn">&#10094; Prev</a></li>
    {% else %}
    <li><a href="#" class="btn btn--disabled">&#10094; Prev</a></li>
    {% endif %}

    <!-- 页码按钮 -->
    {% for page_num in paginator.page_range %}
    <li>
      <a href="?page={{page_num}}" class="btn btn--sub{% if page_num == list.number %} btn--active{% endif %}">{{ page_num }}</a>
    </li>
    {% endfor %}

    <!-- 下一页按钮 -->
    {% if list.has_next %}
    <li><a href="?page={{ list.next_page_number }}" class="btn">Next &#10095;</a></li>
    {% else %}
    <li><a href="#" class="btn btn--disabled">Next &#10095;</a></li>
    {% endif %}
  </ul>
</div>

内容的提问来源于stack exchange,提问作者Fahad Waseem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:30:53