Django分页后forloop.counter重置如何实现任务序号全局连续?
解决方案
直接修改模板内的序号输出逻辑即可,无需自定义额外模板标签,修改后的循环部分代码如下:
{% for task in tasks %} <tbody> <tr> <!-- 替换原有的 {{ forloop.counter }} --> <th scope="row" class="col-md-1">{{ page_obj.start_index|add:forloop.counter0 }}</th> <td class="col-md-2">{{ task.title }}</td> <td class="col-md-3">{{ task.description|truncatewords:10 }}</td> <td class="col-md-2">{{ task.time|date:"H:i" }} - {{ task.time|date:"D d M , Y" }}</td> </tr> </tbody> {% endfor %}
实现逻辑
- Django分页的
page_obj对象内置start_index属性,返回当前页第一条数据在全量数据集中的全局序号(从1开始计数) forloop.counter0返回当前循环的索引,从0开始计数- 两者相加即可得到全局连续的序号,切换分页时不会重置计数
- 如果你的视图中传递给模板的分页对象名称不是
page_obj,将代码中的对应变量替换为你实际使用的变量名即可
你也可以使用显式计算的等效写法,逻辑更直观:
{{ (page_obj.number - 1) * page_obj.paginator.per_page + forloop.counter }}
内容的提问来源于stack exchange,提问作者Fateme Fouladkar
相关产品推荐
相关产品推荐

