1. 程式人生 > >django外掛-dj-pagination簡單設定實現分頁(甚至不用在view上寫paginate)

django外掛-dj-pagination簡單設定實現分頁(甚至不用在view上寫paginate)

1. 概述

django真的有好多簡單方便好用的輪子!!!
這次介紹的這個是用於分頁的,django中本身提供了實現分頁的物件,但是每次都要寫一堆業務程式碼,也是神煩。
在django-awesome專案中發現了這個輪子:

文件也很簡單,三四頁的樣子。
下面一起來探索一下吧!

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被定義為:
在最小數目的專案允許上的最後一個頁面,預設到零。

更多文章可以訪問我的個人部落格:碼練