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

Django 5.1分页器无法实现每页4条数据,请求技术支持

解决Django 5.1分页器每页显示全部数据的问题

问题核心:模板中遍历的是未分页的完整数据集合,而非分页后的结果对象,导致所有数据一次性展示。以下是具体修复步骤:

1. 优化视图代码(可选但推荐)

为避免变量名混淆,可调整变量命名,同时无需再传递完整查询集给模板:

def tipomaterial(request):
    # 获取完整数据并排序
    all_tipomaterial = TipoMaterial.objects.all().order_by('nombre')
    # 初始化分页器,每页4条数据
    paginator = Paginator(all_tipomaterial, 4)
    # 获取当前页码,默认显示第1页
    page_number = request.GET.get('page', 1)
    # 获取当前页的分页数据对象
    page_tipomaterial = paginator.get_page(page_number)

    # 仅传递分页后的对象给模板
    return render(request, 'tipomaterial.html', 
                  {'page_tipomaterial': page_tipomaterial})   

2. 修改模板代码(核心修复)

将模板中遍历的对象替换为分页后的结果对象:

<main class="container py-5">
<table class="table table-bordered table-responsive">
    <tbody class="table-group-divider">
            {% for datos in page_tipomaterial %}
            <tr>    
                <td>
                    <li class="list-group-item" href="{% url 'detalle_tipomaterial' datos.id %}">               
                        <strong>{{datos.nombre}}</strong>              
                    </li>
                </td>
            </tr>
            {% endfor%}
    </tbody>             
</table>

<br/><hr>

<span class="step-links">
    {% if page_tipomaterial.has_previous %}
    <a href="?page={{ page_tipomaterial.previous_page_number }}">Previous</a>
    {% endif %}
    <span class="current">
    Page {{ page_tipomaterial.number }} of {{ page_tipomaterial.paginator.num_pages }}.
    </span>
    {% if page_tipomaterial.has_next %}
    <a href="?page={{ page_tipomaterial.next_page_number }}">Next</a>
    {% endif %}
</span>     

若不想修改视图变量名,保持原代码中的pgtm变量,只需将模板里的page_tipomaterial全部替换为pgtm即可,核心逻辑始终是遍历分页后的对象而非完整查询集。

内容的提问来源于stack exchange,提问作者Andres Vilca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:02:32