详解Django的 page_range() 函数:获取页码范围

  • Post category:Python

Django的page_range()函数是一个分页方法中的函数,用于获取当前页码的前后一定范围内的页码。该函数的作用是在网站分页时,为了方便用户的浏览,提供当前页的前后n个页码,让用户能够更加便利地进行页面的浏览。

使用方法:

在Django中,可以在 views.py 视图文件中的某个视图函数中使用 page_range() 函数。在该函数中,我们需要先获取当前页的页码,然后利用page_range()方法获取当前页前后n个页码,最后将获取到的页码变量传递到模板文件中,以便在网页上展示。

具体代码如下:

from django.core.paginator import Paginator

def your_view(request):
    # 获取当前页码,需要指定默认值
    page_num = request.GET.get('page', 1)

    # 使用Paginator类进行分页
    paginator = Paginator(queryset, 10)  # 每页显示10条数据

    # 获取当前页码的前后2个页码
    page_range_list = paginator.page_range[int(page_num) - 1 : int(page_num) + 1]

    # 将页码变量传递到模板文件中
    context = {'paginator': paginator, 'page_range_list': page_range_list}
    return render(request, 'your_template.html', context=context)

在模板中可以这样遍历页码,使用模板标签 for

{% for num in page_range_list %}
    <li class="page-item {% if page_obj.number == num %}active{% endif %}">
        <a class="page-link" href="?page={{ num }}">{{ num }}</a>
    </li>
{% endfor %}

下面提供两个使用 page_range() 的实例:

  1. 加载新闻列表。假设我们的网站提供新闻列表,每页显示10条新闻。我们需要提供一个分页功能,让用户可以浏览到所有的新闻。在网站新闻列表中,我们可以使用 page_range() 获取当前页的前后n个页码,并在前端将其呈现出来。

  2. 电影列表。我们需要在电影列表中提供分页功能。每页显示12部电影。我们需要获取当前页的前后2个页码,并根据这些页码在前端显示出来。这样用户可以快速切换到其他电影页面,更加便利地进行浏览。