django-pure-pagination 组件
用于在 django 中自动创建分页
官方详见 github :
安装
pip install django-pure-pagination
配置
settings.py
加入 apps 中 需要加入到 apps 中
INSTALLED_APPS = ( ... 'pure_pagination',)
使用
views.py
Paginator 实例的时候需要传入 参数
实例对象 每页显示数量 request
ps:
官方的文档中中未写明. 所以会报错缺少参数
因此这里要稍微注意
from django.shortcuts import render_to_responsefrom pure_pagination import Paginator, EmptyPage, PageNotAnIntegerdef index(request): try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 objects = ['john', 'edward', 'josh', 'frank'] # Provide Paginator with the request object for complete querystring generation
p = Paginator(all_orgs, 5, request=request)
people = p.page(page) return render_to_response('index.html', { 'people': people, })
index.html
直接通过 {
{ people.render }} 可以自动帮你生成分页. 但是样式没法改的如果想使用自己的样式分页则需要另一种方式
{# index.html #}{% extends 'base.html' %}{% block content %}{% for person in people.object_list %}First name: { { person }}{% endfor %}{# The following renders the pagination html #}{ { people.render }}{% endblock %}
这里是官方提供的自定义的方法,较为清晰
{% load i18n %}{% if page_obj.has_previous %} ‹‹ {% trans "previous" %} {% else %} ‹‹ {% trans "previous" %} {% endif %} {% for page in page_obj.pages %} {% if page %} {% ifequal page page_obj.number %} { { page }} {% else %} { { page }} {% endifequal %} {% else %} ... {% endif %} {% endfor %} {% if page_obj.has_next %} {% trans "next" %} ›› {% else %} {% trans "next" %} ›› {% endif %}
实例
views.py
将要分页的对象创建分页对象传递给前端
try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 p = Paginator(all_orgs, 5, request=request) orgs = p.page(page) return render(request, "org-list.html", { "all_orgs": orgs, })
org-list.html
前端对 分页数据进行渲染成分页器
具体怎么用参考以下
{% if all_orgs.has_previous %}
- 上一页
{% endif %} {% for page in all_orgs.pages %} {% if page %} {% ifequal page all_orgs.number %}- { { page }}
{% else %}- { { page }}
{% endifequal %} {% else %}- ...
{% endif %} {% endfor %} {% if all_orgs.has_next %}- 下一页
{% endif %}
具体实现效果