使用 Paginator 实现分页功能

原文:http://mozillazg.com/2013/01/django-pagination-by-use-paginator.html

在 django 中使用 Paginator 可以很方便的实现分页功能,下面就通过一个具体的例子来讲讲如何使用 Paginator。

在 view 中使用 Paginator

from django.core.paginator import Paginatorfrom django.core.paginator import EmptyPagefrom django.core.paginator import PageNotAnIntegerfrom hello.models import Topicdef index(request):    limit = 3  # 每页显示的记录数    topics = Topic.objects.all()    paginator = Paginator(topics, limit)  # 实例化一个分页对象    page = request.GET.get('page')  # 获取页码    try:        topics = paginator.page(page)  # 获取某页对应的记录    except PageNotAnInteger:  # 如果页码不是个整数        topics = paginator.page(1)  # 取第一页的记录    except EmptyPage:  # 如果页码太大,没有相应的记录        topics = paginator.page(paginator.num_pages)  # 取最后一页的记录    return render_to_response('index.html', {'topics': topics})

模板中的相关操作

{% for topic in topics.object_list %}  {{ topic.title }}{% endfor %}<!-- 第一种分页显示方式 -->  {# topics.paginator.page_range 这个函数返回包含一个所有页码数的 range 对象 #}  {# 即 range(1, topics.paginator.num_pages + 1) #}  {% for page_number in topics.paginator.page_range %}    {% ifequal page_number  topics.number %}      {{ page_number }}    {% else %}      {{ page_number }}    {% endifequal %}  {% endfor %}<!-- 另一种分页显示方式 -->{% if topics.has_previous %}  Previous  {% endif %}  {# topics.paginator.number_pages 返回总页数 #}  Page {{ topics.number }} of {{ topics.paginator.num_pages }}.{% if topics.has_next %}  Next{% endif %}

效果:

基于 django 1.4.3 的示例项目:仓库?&&?下载?。

使用 Paginator 实现分页功能

相关文章:

你感兴趣的文章:

标签云: