标题:Django 使用内置分页模块分页的简单实现 出处:Husw!OnRoad 在路上 时间:Sat, 01 Oct 2011 06:37:32 +0000 作者:我就是个世界 地址:https://www.husw.net/blog/post/1346/ 内容: Django分页比较简单,它内置了一个Paginator类.这样对分页的操作只需要明白这个类就OK了。 def list(request): page_size=10 after_range_num = 5 bevor_range_num = 4 try: page = int(request.GET.get("page",1))[separator] #print('page----->',page) if page < 1: page = 1 except ValueError: page = 1 info = Article.objects.order_by('id').all() paginator = Paginator(info,page_size) try: articleList = paginator.page(page) except(EmptyPage,InvalidPage,PageNotAnInteger): articleList = paginator.page(1) #print('articleList---->',articleList.object_list) #显示范围 if page >= after_range_num: page_range = paginator.page_range[page-after_range_num:page+bevor_range_num] else: page_range = paginator.page_range[0:int(page)+bevor_range_num] return render_to_response("blogsite/list.html",locals()) html代码如下: {% if info %} {% for article in articleList.object_list %}
-----{{ article.title }}
{% endfor %} {% else %}

对不起没有文章奥!

{% endif %}
{% if articleList.has_previous %} 上一页  {% endif %} {% for p in page_range %} {% ifequal p articleList.number %} {{p}} {% else %} {{p}} {% endifequal %} {% endfor %}   {% if articleList.has_next %} 下一页  {% endif %} 第 {{ articleList.number }} 页 共 {{ articleList.paginator.num_pages }} 页 总计{{ articleList.paginator.count }}篇文章 Paginator对象 类Paginator: class Paginator(object_list,per_page,orphans=0,allow_empty_first_page=True) 必须提供的参数: object_list:一个列表或元组,元素是django QuerySet或是包含count()或__len__()方法的可切片对象。 per_page:包含在一页中最多的条目数量。 可选参数: orphans:在最后一页中充许的最少条目数量,默认是0.当最后一页条目数量小于或等于orphans时,这些条目加到本页的上一页中。 allow_empty_first_page:是否充许第一页为空。如设为False且object_list为空,则抛出EmptyPage异常。 [b]方法 Paginator.page(number):返回一个Page对象,序号是始于1.如给出的页号不存在,抛出InvalidPage异常。 属性 Paginator.num_pages:页面总页数 Paginator.page_range:页面数的范围,始于1,如[1,2,3,4]。 InvalidPage异常 如要求的页面无效或页面中没有对象,page()抛出InvalidPage异常。 PageNotAnInterger:当提供给page()的数不是整数是抛出该异常。 EmptyPage:当提供给page()的数是一个有效数,但在该页没有对象存在时,抛出该异常。 Page对象 class Page(object_list,number,paginator): 一般不手工创建Pages,可以使用Paginator.page(). 方法: Page.has_next():如有下一页则返回True Page.has_previous():如有上一页则返回True Page.has_other_pages():如有上一页或下一页返回True Page.next_page_number():返回下一页的页码。不管下一页是否存在都返回。 Page.previous_page_number():返回上一页的页码。不管上一页是否存在都返回。 Page.start_index():返回当前页面中第一个对象的序号,序号始于1.例如:将一个包含5个对象的列表分成每页2个对象,则第二页的start_index()返回3. Page.end_index():返回当前页面中最一个对象的序号。 属性 Page.object_list:当前页面中所有的对象 Page.number:当前页面的页码,始于1 Page.paginator:页面相关的Pageinator对象。 Generated by Bo-blog 2.1.2 beta 3