https://github.com/jamespacileo/django-pure-pagination
分页组件 django-pure-pagination
pip install django-pure-pagination
基本配置:
INSTALLED_APPS = (
...
'pure_pagination',
)
PAGINATION_SETTINGS = {
'PAGE_RANGE_DISPLAYED': 10,
'MARGIN_PAGES_DISPLAYED': 2,
'SHOW_FIRST_PAGE_WHEN_INVALID': True,
}
使用:
# _*_ encoding:utf-8 _*_
from django.shortcuts import render
from django.views import View
from .models import OrganizationInfo, CtiyInfo
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
# Create your views here.
class OrgListView(View):
def get(self, request):
oraganization = OrganizationInfo.objects.all()
org_nums = oraganization.count()
ctiyinfo = CtiyInfo.objects.all()
# 分页逻辑
people = self.getPagePeople(request, oraganization)
return render(request, "org-list.html",
{"oraganization": people, "ctiyinfo": ctiyinfo, "org_nums": org_nums})
# 用来处理分页
'''
obj,需要返回的数据
'''
def getPagePeople(self, request, obj):
# 分页逻辑
try:
page = request.GET.get('page', 1)
except PageNotAnInteger:
page = 1
# 第二个参数就是,一页显示几个条目
p = Paginator(obj, 5, request=request)
people = p.page(page)
return people
模板如何使用:
<div class="pageturn">
<ul class="pagelist">
{# 如果存在上一页的,那么就是显示正常的上一页的样式,如果存在将要显示什么样的上一页样式,我们处理else情况#}
{% if oraganization.has_previous %}
<li class="long"><a href="?{{ oraganization.previous_page_number.querystring }}">上一页</a>
</li>
{% endif %}
{% for page in oraganization.pages %}
{% if page %}
{% ifequal page page_obj.number %}
<li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
{% else %}
<li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
{% endifequal %}
{% else %}
<li class="none"><a href="">...</a></li>
{% endif %}
{% endfor %}
{#如果存在下一页样式,那么显示,如果不存在我就没处理,则不显示任何样式#}
{% if oraganization.has_next %}
<li class="long"><a href="?{{ oraganization.next_page_number.querystring }}">下一页</a>
</li>
{% endif %}
</ul>
</div>