欢迎访问宙启技术站
智能推送

在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获取当前页码。

这是一个简单的使用分页器的例子,希望对你有帮助!