我只能說, 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。
真的是太貼心了阿~