django paginator实现分页
2017-11-09 本文已影响53人
菩提老鹰
Abstract
Django是一个由Python写成的开放源代码的Web应用框架。围绕Django也有很多现成的功能包。
这里介绍的paginator实现分页就是其中之一
实例测试
创建好应用(这里以blog应用为例)之后,在应用的view.py
中添加如下:
from django.core.paginator import Paginator
from django.core.paginator import PageNotFound, EmptyPage
from .models import Post
这里我们需要在blog首页展示所有Post,然后实现分页。
def index(request):
# 每页post数量
limit = 5
posts = Posts.objects.all()
paginator = Paginator(posts, limit)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotFound:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'blog/index.html', context={'posts': posts})
根据上面的代码,我们在blog/index.html
中进行相关的配置操作
首先展示所有post,方法和一般的一样
{% for post in posts %}
<h2>{{ post.title }}</h2>
<hr>
<p>{{ post.content }}</p>
{% endfor %}
接下来在展示post的区域的下方实现分页的具体展示。 官方给出的有两种基本的实现方式
方式一:
<nav style="text-align:center;">
{% if posts.has_previous %}
<a href="?page={{ posts.previous_page_number }}">
<span class="glyphicon glyphicon-menu-left"></span>
</a>
{% endif %}
第 {{ posts.number }} 页/总 {{ posts.paginator.num_pages }} 页
{% if posts.has_next %}
<a href="?page={{ posts.next_page_number }}">
<span class="glyphicon glyphicon-menu-right"></span>
</a>
{% endif %}
</nav>
效果如下:
django paginator实现分页1方式二(展示全部页码)
<nav style="text-align:center;">
{% for page_number in posts.paginator.page_range %}
{% ifequal page_number posts.number %}
{{ page_number }}
{% else %}
<a href="?page={{ page_number }}">{{ page_number }}</a>
{% endifequal %}
{% endfor %}
</nav>
效果如下:
django paginator实现分页2