Django pagination

Django pagination 小结,参见django documentation

  1. 导入Paginator
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  1. 使用Paginator,建立实例
def listing(request):
    OBJECTS_TO_SHOW = ['test%d' % x for x in xrange(10)]
    NUM_PER_PAGE = 4

    paginator = Paginator(OBEJCTS_TO_SHOW, NUM_PER_PAGE)

    page = request.GET.get('page')

    try:
        contents = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        contents = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        contents = paginator.page(paginator.num_pages)
  1. 在Template中使用
{% for content in contents %}
    {{ content }}<br />
    ...
{% endfor %}

<div class="pagination">
    <span class="step-links">
        {% if contacts.has_previous %}
            <a href="?page={{ contents.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ contacts.number }} of {{ contents.paginator.num_pages }}.
        </span>

        {% if contents.has_next %}
            <a href="?page={{ contents.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>
  1. 其他相关属性/方法

Paginator 实例具有的属性方法

Paginator.page(page_num)  # 返回第page_num页的一个Page实例

Paginator.count # 所有要显示的内容的长度
Paginator.num_pages # 所有要显示的内容分成的页码数,即共多少页
Paginator.page_range # 页码范围

Page 实例具有的属性/方法

Page.previous()
Page.next()
Page.has_other_pages()
Page.previous_page_number()
Page.next_page_number()
Page.start_index()
Page.end_index()

Page.object_list  # 在本页中显示的内容
Page.number # 本页页码
Page.paginator # 对应的Paginator实例

转载于:https://my.oschina.net/alazyer/blog/214436

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值