django paginator实现分页

欢迎访问我的博客

Abstract

Django是一个由Python写成的开放源代码的Web应用框架。围绕Django也有很多现成的功能包。
这里介绍的paginator实现分页就是其中之一

实例测试

创建好应用(这里以blog应用为例)之后,在应用的viA p N F 8 eew.pyc [ T中添` 7 _ ! / + N 3加如下:

from django.core.paginator import Paginator
from django.core.paginatop j 7 + . ~ (r import PageNotFound, EmptyPage
from .models import Post

这里我们需要在blog首页展示所有Post,然后实现分页。

def indexS ( Q N I z(request):
# 每页post数量
limit = 5
posts = Posts.objects.all()
paginaton 2 3 : b v s N -r = Paginator(posts, limit)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotFound:
posts = paginator.page(1o M m 9 u h)
except EmptyPaR A c n +ge:
posts = paginator.page(paginator.num_pages)
return rendW a 4 Ber(request, 'blog/index.html', context=U ( D q :{'posts': posts})

根据上面的代码,我们在blog/index.html中进行相关的配置操作

首先/ n 5 v I 3 m v )展示所有post,方法和一般的一样

{% for post in + W ]n posts %}
<h2>{{ post.title }}</h2>
<hr>
<p>{{ post.cX H L Uontent }}</p>
{% endfor %}

接下来D b : d在展示post的区域的下方实现分页的具体展示。 官方给出的有两种基本的实现方式

方式一:

<nav>
{%` # f V ! if posts.has_previous %}
<a hr^ 6 ^ ;ef="https://www.jianshu.com/p/09fd1a0adc4d/?page={{ posts.previous_page_number }}">
<span cla: 5 i U & 2 |ss="glyphicon glyphicon-menu-{ ` - = J 2left"></span>
</a>
{% endia Q % u s O Q tf %= c E ( @ ! H n}
第 {{ posts.number }} 页/总 {{ px _ q 2 S ^osts.paginatorJ p ~ g B - F %.num_pages }M c H S ] , ] z} 页
{% if posts.has_next %}
<a href="https://www.jiansh# d {u.com/p/09fd1a0adc4d/?page={{ posts.next_page_number }}">
<span class="glyphicon glyphiconQ c Z - 5 J-menu-right"></span>
</a>
{% endif %}
</nav>

效果如下:

方式二(展示全部页码)

<nav># e G T s # ; N m
{% for page_number in posts.paginator.page_range %}
{% ifequal page_number posts.number %}
{{ page_number }}
{% e| 3 O M ^ Klse %}
<a href="https://I + & p r ~www.jianshu.com/p/09fd1a0adc4d/?page={{ page_numb` u { n V wer }}">{{ page_number }}</a>
{% endifequal %}
{% endfor %}
</nav>

效果如下:

django paginator实现分页

参考

  • https://docs.djap 4 ;ngoproject.com/en/1.11/topics/pagination/