目前我正在用 django 编写一个简单的待办事项列表。我有一个用于显示项目列表的视图和 html 文件,我希望表中的每个任务都有一个从 1 开始的编号。我在模板中使用
{% footloop.counter %}
来表示。
一切都很好,直到我写了分页器。当选择进入下一页时,计数器又从1开始,因此每页表格中的数字也从1开始。但我希望数字按顺序继续,直到最后一页。是否有任何模板标签或代码片段? 预先感谢。
涉及的代码如下:
**list.html:**
{% for task in tasks %}
<tbody>
<tr>
<th scope="row" class="col-md-1">{{ forloop.counter }}</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 %}
<!--Pagination-->
{% if is_paginated %}
<div class="container p-4">
<div class="pagination justify-content-center">
<span class="step-links">
{% if page_obj.has_previous %}
<a href="{% url 'home:list' 1 %}">« first</a>
<a href="{% url 'home:list' page_obj.previous_page_number %}">previous</a>
{% endif %}
<span class="current">
Page {{ page_obj.number }} of {{page_obj.paginator.num_pages }}
</span>
{% if page_obj.has_next %}
<a href="{% url 'home:list' page_obj.next_page_number %}">next</a>
<a href="{% url 'home:list' page_obj.paginator.num_pages%}">last »</a>
{% endif %}
</span>
</div>
</div>
{% endif %}
您可以尝试构建自己的模板标签并在模板上使用它,如下所示:-
@register.filter
def adjust_for_counter(value, page):
value, page = int(value), int(page)
counter_value = value + ((page - 1) * settings.RESULTS_PER_PAGE)
return counter_value
并在 html 中像下面这样调用它:-
{{ forloop.counter|adjust_for_pagination:page }}
欲了解更多详情,您可以参考以下链接:- https://djangosnippets.org/snippets/1391/
您可以在 Django 模板中添加带有当前分页对象的起始索引的 forloop 计数器。
{{ forloop.counter0|add:tasks.start_index }}
我们使用 forloop.counter0 而不是 forloop.counter 的原因是 forloop.counter 从 1 开始,而 forloop.counter0 从 0 开始,符合索引约定。
有关 Django 中分页对象的更多详细信息,您可以参考文档:https://docs.djangoproject.com/en/5.0/topics/pagination/