django-pagination

我只能說, django-pagination 真是一個好物。

雖然說 django 本身提供的 pagination 就已經很不錯用了, 可是在使用上還是稍嫌多餘了些, 得在 view 重複的打上那一段 code, 而 template 那邊也是, 除非就是自己寫 template tag 來處理。

django 原本提供的 pagination, 在寫 view 的時候大概像是這樣: (直接拿 django 的 example)

from django.core.paginator import Paginator, InvalidPage, EmptyPage

def listing(request):  
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25)

    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    try:
        contacts = paginator.page(page)
    except (EmptyPage, InvalidPage):
        contacts = paginator.page(paginator.num_pages)

    return render_to_response('list.html', {"contacts": contacts})

而如果使用 django-pagination 的話, 看到 view 就真的是會笑出來了 XD

def listing(request):  
    contacts = Contacts.objects.all()
    return render_to_response('list.html', {"contacts": contacts})

就這樣! 而且還不用 import Paginator。

基本上 django-pagination 的處理動作都在 template 那邊, 看起來大概像是這樣

{% load pagination_tags %} # 載入 template tag

{% autopaginate contacts 10 %} # 加上這一行處理分頁
{% for contact in contacts %}
    {{ contact.name }}
{% endfor %}

{% paginate %} # 秀出分頁

That’s all! :D

比照一下 django 內建的 pagination, 就可以明顯比較出 template 之間差別了, django-pagination 真是超令人開心的一個套件阿, 而且作者還提供了一個 screencast

真的是太貼心了阿~

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!