分頁功能是django的一個模塊,可以直接導(dǎo)入:
from django.core.paginator import Paginator
主要的方法函數(shù)是page,可以通過實例化的paginator.page(i)指定返回第i頁的page對象,但是如果i指定的內(nèi)容是錯的,就會產(chǎn)生一個錯誤皂甘。
除此之外,Paginator還有no_pages,page_range屬性,分別表示全部頁數(shù)和產(chǎn)生頁碼迭代器.
page()方法函數(shù)所返回的Page對象具有以下常見的方法函數(shù):
has_next()
has_previous()
has_other_pages()
next_page_number()
previous_page_number()
下面是一個例子:
views.py:
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
def index(request):
all_polls = models.Poll.objects.all().order_by('-created_at')
paginator = Paginator(all_polls,5)
p = request.GET.get('p')
try:
polls = paginator.page(p)
except PageNotAnInteger:
polls = paginator.page(1)
except EmptyPage:
polls = paginator.page(paginator.num_pages)
template = get_template('index.html')
request_context = RequestContext(request)
request_context.push(locals())
html = template.render(request_context)
return HttpResponse(html)
index.html
<div class="row">
<button class='btn btn-info'>
目前是第{{ polls.number }}頁
</button>
{% if polls.has_previous %}
<button class="btn-info btn">
<a href="?p={{ polls.prvious_page_number }}">上一頁</a>
</button>
{% endif %}
{% if polls.has_next %}
<button class="btn-info btn ">
<a href="?p={{ polls.next_page_number }}">下一頁</a>
</button>
{% endif %}
</div>