django插件-dj-pagination简单设置实现分页(甚至不用在view上写paginate)

1. 概述

django真的有好多简单方便好用的轮子!!!
这次介绍的这个是用于分页的,django中本身提供了实现分页的对象,但是每次都要写一堆业务代码,也是神烦。
在django-awesome项目中发现了这个轮子:

dj-pagination项目地址

dj-pagination文档地址

文档也很简单,三四页的样子。
下面一起来探索一下吧!

2. 快速实现

A. 将以下配置加入settings文件中.

1. 加入app
INSTALLED_APPS += (
    'dj_pagination' ,
)
2. 加入中间件

Django 版本低于1.10 使用 MIDDLEWARE_CLASSES

MIDDLEWARE += ( 
    'dj_pagination.middleware.PaginationMiddleware' ,
)
3. 添加模板上下文处理器

TEMPLATE_CONTEXT_PROCESSORS 默认情况下是隐式设置,这里声明出来以了解用了哪些处理器

TEMPLATE_CONTEXT_PROCESSORS =(
	"django.core.context_processors.auth",
	"django.core.context_processors.debug",
	"django.core.context_processors.i18n",
	"django.core.context_processors.media",
	"django.core.context_processors.request"
)

B. html模板文件

这里假设传入模板的查询集列表是object_list

1. 在html的最上面声明使用pagination_tags 模板标签
{% load pagination_tags %}
2. 自动分页处理器

语法为autopaginate QUERYSET [PAGINATE_BY] [ORPHANS] [as NAME]
其中PAGINATE_BY是分页时每页的对象个数,默认为20

{% autopaginate object_list 10 as object_list_page %}
3. 使用分页对象

这里的显示效果自己写html+css即可

{% for object in object_list_page%}
    <div>object.title</div>
    <div>object.name</div>
{% endfor %}
4. 生成页码
{% paginate %}

页码展示

以上几步完成之后分页就完成了,没有复杂的逻辑!你只需要提供一个object_list列表即可!

3. 其他功能

3.1 自定义分页模板

pagination/blog/post.html是你的模板位置
默认使用pagination/pagination.html

{% autopaginate posts pagesize %}
{% paginate using "pagination/blog/post.html" %}

3.2 同个模板中多次使用分页

你可以多次使用autopaginate/paginate,需要注意的是你必须在使用paginate前使用autopaginate.

3.3 其他设置

PAGINATION_INVALID_PAGE_RAISES_404
对应页码无效的页码是抛出404错误(True)还是不显示对象(False 默认).

PAGINATION_DISPLAY_PAGE_LINKS
如果设置为False,分页结果为单页则不将显示页码。默认为True, 单页也显示页码。

PAGINATION_PREVIOUS_LINK_DECORATOR
'上一页'链接的HTML内容前缀,默认为`&lsaquo;&lsaquo;`也就是 `<<`

PAGINATION_NEXT_LINK_DECORATOR
'下一页'链接的HTML内容前缀,默认为`&rsaquo;&rsaquo;`也就是 `>>`

PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK
如果设置为False,如果没有上一页则显示上一页链接。默认为False。

PAGINATION_DISPLAY_DISABLED_NEXT_LINK
如果设置为False,如果没有下一页则显示下一页链接。默认为False。

PAGINATION_DISABLE_LINK_FOR_FIRST_PAGE
如果设置为False,第一页将`?page=1`显示分页的链接后缀,否则(True)将被忽略。默认为True。

机器翻译(以后优化…)

关于上传的说明
当把dj-pagination和文件上传一起使用时,要注意什么时候request.page被访问是很重要的。一旦 request.page被访问,request.upload_handlers被冻结,不能以任何方式改变。page在视图中尽可能晚地访问请求对象上的属性是一个好主意。

可选设置
在dj-pagination中,没有必要的设置。但是,有一小部分可选设置可用于更改分页标签的默认行为。这里有一个概述:

PAGINATION_DEFAULT_PAGINATION
如果未指定编号,则显示在页面上的默认项目数量。默认为20
PAGINATION_DEFAULT_WINDOW
显示当前页面左侧和右侧的项目数(占椭圆)。默认为4。
PAGINATION_DEFAULT_MARGIN
FIXME:这需要记录。
PAGINATION_DEFAULT_ORPHANS
允许的ORPHANS数。根据Django文档,ORPHANS被定义为:
在最小数目的项目允许上的最后一个页面,默认到零。

版权声明:本文为weixin_39198406原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。