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
相关产品推荐
相关产品推荐

