视图函数
from django.core.paginator import Paginator
def index(request):
if request.method=='GET':
article_list=models.Article.objects.all().order_by("pk")
# 将文章分成每页3篇
paginator=Paginator(article_list,3)
current_page=request.GET.get('page',1)
current_page=int(current_page)
page=paginator.page(current_page)
if paginator.num_pages>5:
if current_page<=3:
page_range=range(1,6)
elif current_page+2>=paginator.num_pages:
page_range=range(paginator.num_pages-4,paginator.num_pages+1)
else:
page_range=range(current_page-2,current_page+3)
else:
page_range=paginator.page_range
return render(request,'index.html',
{"article_list":article_list,"request":request,"page_range":page_range,
"page":page})
模板代码
<nav aria-label="Page navigation">
<ul class="pagination">
{% if page.has_previous %}
<li>
<a href="/index/?page={{ page.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Previous ">
<span aria-hidden="true">«</span>
</a>
</li>
{% endif %}
{% for num in page_range %}
{% if num == current_page %}
<li class="item active"><a href="/index/?page={{ num }}">{{ num }}</a></li>
{% else %}
<li><a href="/index/?page={{ num }}">{{ num }}</a></li>
{% endif %}
{% endfor %}
{% if page.has_next %}
<li>
<a href="/index/?page={{ page.next_page_number }}" aria-label="Previous">
<span aria-hidden="true">»</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Previous ">
<span aria-hidden="true">»</span>
</a>
</li>
{% endif %}
</ul>
</nav>