在Django模板上下文中使用分页
发布时间:2023-12-17 05:22:04
在Django中,可以使用分页器将查询结果分成多个页面显示。在模板中使用分页器的步骤如下:
1. 导入Paginator和Page对象:
from django.core.paginator import Paginator, Page
2. 在视图函数中查询数据,并创建Paginator对象:
from django.shortcuts import render
from .models import MyModel
def my_view(request):
queryset = MyModel.objects.all()
paginator = Paginator(queryset, 10) # 每页显示10条数据
page_num = request.GET.get('page') # 从URL参数中获取当前页码
try:
page = paginator.page(page_num)
except PageNotAnInteger:
page = paginator.page(1) # 如果页码不是一个整数,显示 页
except EmptyPage:
page = paginator.page(paginator.num_pages) # 如果页码超出范围,显示最后一页
return render(request, 'my_template.html', {'page': page})
3. 在模板中使用分页对象进行数据展示:
{% for item in page %}
{{ item.name }}<br/>
{% endfor %}
<div class="pagination">
{% if page.has_previous %}
<a href="?page={{ page.previous_page_number }}">上一页</a>
{% endif %}
<span class="current-page">{{ page.number }}</span>
{% if page.has_next %}
<a href="?page={{ page.next_page_number }}">下一页</a>
{% endif %}
</div>
在这个例子中,我们创建了一个Paginator对象,将查询结果分页。每页显示10条数据。然后我们通过request.GET.get('page')获取当前页码,默认为1。然后使用Paginator的page()方法获取对应页码的数据,如果页码不是一个整数,则显示 页;如果页码超出范围,则显示最后一页。
在模板中,我们通过{% for item in page %}遍历每一页的数据,并展示出来。
在分页导航栏中,我们使用page.has_previous和page.has_next来判断是否有上一页和下一页。如果有,则通过page.previous_page_number和page.next_page_number获取上一页和下一页的页码,并构建出相应的URL链接。
最后,我们在分页导航栏中显示当前页码,使用page.number获取当前页码。
这是一个简单的使用分页器的例子,希望对你有帮助!
