django-pagination---七步教你实现Django网站列表自动分页
網(wǎng)站,特別是論壇,就如本社區(qū)一樣,肯定會遇到某個頁面要顯示列表(比如本社區(qū)的首頁,要顯示主題列表),那肯定就會涉及到列表的分頁功能。
舉個例子,比如一個列表有100個item,那我們網(wǎng)站的頁面是不是將此100個item都顯示出來嗎?顯示不是哦,這樣做以后一來是頁面不好看(頁面太長啦),用戶體驗不好(用戶根本不需要看這么多item);第二就是性能不好(一下子讀取這么多item,網(wǎng)站肯定很吃力 啊)。
廢話就不說啦,今天將要介紹一下Django的分頁利器APP--- django-pagination,它可以非常方便的為你實現(xiàn)你的分頁目標!我將結(jié)合 本社區(qū)的實現(xiàn)方式來介紹。
項目主頁:?https://github.com/ericflo/django-pagination/
本社區(qū)使用它來進行各種列表的分頁。
介紹:
django-pagination allows for easy Digg-style pagination without modifying your views.
django-pagination就像它的名字一樣,它是一個Django分頁器,它包含了一組翻頁功能相關(guān)的utils,包括用于實現(xiàn)翻頁的tag等。使用起來非常簡單。是目前使用最多的分頁APP。
如何使用:
總共有七步來實現(xiàn):
安裝
sudo python setup.py install
將該APP安裝至Django項目中。(請修改settings.py)
INSTALLED_APPS = (# ...'pagination',)在Django項目的middleware中安裝此APP:(請修改settings.py)
MIDDLEWARE_CLASSES = (# ...'pagination.middleware.PaginationMiddleware',)這樣,django-pagination可以在頁面請求過程中做一些簡單的處理。
請確保你的請求上下文含有django.core.context_processors.request。 如果沒有的話,請將django.core.context_processors.request加入到 TEMPLATE_CONTEXT_PROCESSORS中,示例如下:(請修改settings.py)。
("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")在你要進行列表分頁的頁面(template)的頁面上方(最好是最上面)中 導入 它的tag, 以便后續(xù)我們可以在模板中使用它的一些功能。
{% load pagination_tags %}在你的模板(template)頁面上,對你想要分頁的列表變量(object_list)進行分頁,在模板中寫如下代碼:(這段短代碼的位置要在 放在 你顯示 object_list 之前)
{% autopaginate object_list %}上面對列表分頁后默認每頁有20個,如果你想自己自定義,可以這樣:
{% autopaginate object_list 10 %}這樣對列表分頁后每頁顯示10個。
分頁后,django-pagination會更改object_list 的值,將object_list 變成一個只有20個(默認情況下)的列表。你可以對object_list 進行遍歷,顯示出他們。
經(jīng)過此步后,大家就可以獲取得到只有一頁的列表啦。
經(jīng)過上步,我們得到一頁列表啦,但是我們想要第二頁,第三頁……,最好是在每一頁的最底部有一個頁數(shù)導航欄可以供大家選擇。例如:
方法很簡單。只要在頁面的最底下使用如下代碼:
{% paginate %}當然,頁數(shù)導航欄使用的UI模板是 pagination/templates/pagination/pagination.html ,我們需要按我們站點的UI美觀需要來更改它哦。
小結(jié):
怎么樣,使用django-pagination后,大家肯定會覺得:“哇,太好用啦”,什么事都幫我們做啦。是不是非常方便呢? :)
關(guān)于性能:
還有一個問題沒有解決哦,因為肯定有朋友會問,如果一個列表有100000個item, 我們想要實現(xiàn)每頁40個,那么,當將我們請求該列表時, django-pagination在分頁過程中,請求數(shù)據(jù)庫是取40個,還是取100000啊!
顯然,django-pagination是不可能取100000的啦。
django-pagination 巧妙的利用了Django延遲獲取數(shù)據(jù)的特性,因此,django-pagination每次取數(shù)據(jù)都是只取每頁的數(shù)據(jù)的(也就是上例中的40個),所以是不會有性能 影響 的哦。
關(guān)于這個問題,作者的主頁有兩個視頻解釋:(英文視頻,E文可以的同學可以看看)
http://eflorenzano.com/blog/2008/07/12/first-two-django-screencasts/
總結(jié)
以上是生活随笔為你收集整理的django-pagination---七步教你实现Django网站列表自动分页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django实战(20):分页(Pagi
- 下一篇: Django分页的基本实现办法