Python中Django BBS模板循环楼层分页后如何保持连续计数?
null
Python中Django BBS模板循环楼层分页后如何保持连续计数?
3 回复
我明白你的问题。在Django BBS模板中,当分页显示楼层时,想让楼层号连续计数而不是每页都从1开始,对吧?
关键是要在视图里计算好起始编号,然后传到模板里用。比如第二页每页显示20条,起始楼层号应该是21。
视图示例:
from django.core.paginator import Paginator
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all().order_by('created_at')
paginator = Paginator(posts, 20) # 每页20条
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
# 计算当前页的起始楼层号
start_number = (page_obj.number - 1) * paginator.per_page + 1
context = {
'page_obj': page_obj,
'start_number': start_number,
}
return render(request, 'bbs/post_list.html', context)
模板示例:
{% for post in page_obj %}
<div class="floor">
<!-- 使用start_number和forloop.counter计算连续楼层号 -->
<span class="floor-number">#{{ start_number|add:forloop.counter0 }}</span>
<div class="content">{{ post.content }}</div>
</div>
{% endfor %}
<!-- 分页导航 -->
<div class="pagination">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">上一页</a>
{% endif %}
<span>第 {{ page_obj.number }} 页 / 共 {{ page_obj.paginator.num_pages }} 页</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">下一页</a>
{% endif %}
</div>
核心思路:
- 在视图中计算
start_number = (当前页码-1) * 每页条数 + 1 - 模板中用
{{ start_number|add:forloop.counter0 }}显示连续编号 forloop.counter0是从0开始的循环索引,这样第一行加0,第二行加1,以此类推
简单总结: 在视图里算好起始编号传给模板,用模板过滤器做加法就能实现连续计数。
没用过 django,参考一下
{{ forloop.counter + (当前页码-1) * 每页条目数 }}
Paginatior 直接用啊

