1. from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage

1. 示例

1.1. 视图函数

  1. # views.py
  2. def news(request):
  3. articles_all = Article.objects.all()
  4. # 页码
  5. paginator = Paginator(articles_all, 6) # 每页6个
  6. page = request.GET.get('page') # 获取page
  7. try:
  8. articles = paginator.page(page)
  9. except PageNotAnInteger:
  10. articles = paginator.page(1)
  11. except EmptyPage:
  12. articles = paginator.page(paginator.num_pages)
  13. return render(request, 'list.html', {
  14. 'articles': articles,
  15. })

1.2. 模板中

  1. <!-- list.html -->
  2. <div class="pages">
  3. {% if articles.has_previous %}
  4. <a href="?page={{ articles.previous_page_number }}">上一页</a>
  5. {% endif %}
  6. {% for page in articles.paginator.page_range %}
  7. {% if articles.number == page %}
  8. <a href="#" class="now">{{ page }}</a>
  9. {% else %}
  10. <a href="?page={{ page }}">{{ page }}</a>
  11. {% endif %}
  12. {% endfor %}
  13. {% if articles.has_next %}
  14. <a href="?page={{ articles.next_page_number }}">下一页</a>
  15. {% endif %}
  16. </div>

如果有GET参数传输,则可以把传入后台的GET参数用 urlencode() 重新组合,然后传回页面加载链接后面,比如“下一页”的链接可以是:

  1. <a href="?page={{ articles.next_page_number }}&{{ urlencode_str }}">下一页</a>

2. 基本语法

以下面的 objects_all 为例:

2.1. paginator

  1. objects_all = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10']
  2. paginator = Paginator(objects_all, 3) # 每3个分1页
属性/方法 结果 备注
paginator.count 10 总个数
paginator.num_pages 4 总共分页数
paginator.page_range xrange(1,5) 页码范围
paginator.page(2) objects 生成页面内信息

2.2. objects

  1. objects_all = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10']
  2. paginator = Paginator(objects_all, 3) # 每3个分1页
  3. objects = paginator.page(2) # 模拟第2页
属性/方法 结果 备注
objects.object_list [‘item4’,’item5’,’item6’] 第一页元素列表
objects.number 2 当前分页值
objects.has_previous() True 是否有前一页
objects.has_next() True 是否有下一页
objects.previous_page_number() 1 前一页页码
objects.next_page_number() 3 后一页页码
objects.start_index() 4 第二页开始元素索引
objects.end_index() 6 第二页结束元素索引