Djangoのページネートミドルウェア「django-pagination」を設定する方法

django-paginationを使って、テンプレートで簡単にページ分割を使いましょう。

まずはダウンロードします。

django-pagination

ダウンロードしたら、インストールします。

# python setup.py install
running install
running bdist_egg
running egg_info
writing requirements to django_pagination.egg-info/requires.txt
writing django_pagination.egg-info/PKG-INFO
writing top-level names to django_pagination.egg-info/top_level.txt
writing dependency_links to django_pagination.egg-info/dependency_links.txt
reading manifest file 'django_pagination.egg-info/SOURCES.txt'
writing manifest file 'django_pagination.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/pagination
copying build/lib/pagination/tests.py -> build/bdist.linux-x86_64/egg/pagination
copying build/lib/pagination/middleware.py -> build/bdist.linux-x86_64/egg/pagination
creating build/bdist.linux-x86_64/egg/pagination/templates
creating build/bdist.linux-x86_64/egg/pagination/templates/pagination
copying build/lib/pagination/templates/pagination/pagination.html -> build/bdist.linux-x86_64/egg/pagination/templates/pagination
copying build/lib/pagination/models.py -> build/bdist.linux-x86_64/egg/pagination
copying build/lib/pagination/__init__.py -> build/bdist.linux-x86_64/egg/pagination
creating build/bdist.linux-x86_64/egg/pagination/locale
creating build/bdist.linux-x86_64/egg/pagination/locale/fr
creating build/bdist.linux-x86_64/egg/pagination/locale/fr/LC_MESSAGES
copying build/lib/pagination/locale/fr/LC_MESSAGES/django.mo -> build/bdist.linux-x86_64/egg/pagination/locale/fr/LC_MESSAGES
copying build/lib/pagination/locale/fr/LC_MESSAGES/django.po -> build/bdist.linux-x86_64/egg/pagination/locale/fr/LC_MESSAGES
creating build/bdist.linux-x86_64/egg/pagination/locale/pl
creating build/bdist.linux-x86_64/egg/pagination/locale/pl/LC_MESSAGES
copying build/lib/pagination/locale/pl/LC_MESSAGES/django.mo -> build/bdist.linux-x86_64/egg/pagination/locale/pl/LC_MESSAGES
copying build/lib/pagination/locale/pl/LC_MESSAGES/django.po -> build/bdist.linux-x86_64/egg/pagination/locale/pl/LC_MESSAGES
creating build/bdist.linux-x86_64/egg/pagination/locale/de
creating build/bdist.linux-x86_64/egg/pagination/locale/de/LC_MESSAGES
copying build/lib/pagination/locale/de/LC_MESSAGES/django.mo -> build/bdist.linux-x86_64/egg/pagination/locale/de/LC_MESSAGES
copying build/lib/pagination/locale/de/LC_MESSAGES/django.po -> build/bdist.linux-x86_64/egg/pagination/locale/de/LC_MESSAGES
creating build/bdist.linux-x86_64/egg/pagination/templatetags
copying build/lib/pagination/templatetags/pagination_tags.py -> build/bdist.linux-x86_64/egg/pagination/templatetags
copying build/lib/pagination/templatetags/__init__.py -> build/bdist.linux-x86_64/egg/pagination/templatetags
byte-compiling build/bdist.linux-x86_64/egg/pagination/tests.py to tests.pyc
byte-compiling build/bdist.linux-x86_64/egg/pagination/middleware.py to middleware.pyc
byte-compiling build/bdist.linux-x86_64/egg/pagination/models.py to models.pyc
byte-compiling build/bdist.linux-x86_64/egg/pagination/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-x86_64/egg/pagination/templatetags/pagination_tags.py to pagination_tags.pyc
byte-compiling build/bdist.linux-x86_64/egg/pagination/templatetags/__init__.py to __init__.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying django_pagination.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying django_pagination.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying django_pagination.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying django_pagination.egg-info/not-zip-safe -> build/bdist.linux-x86_64/egg/EGG-INFO
copying django_pagination.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying django_pagination.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
creating 'dist/django_pagination-1.0.5-py2.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing django_pagination-1.0.5-py2.6.egg
removing '/usr/local/lib/python2.6/site-packages/django_pagination-1.0.5-py2.6.egg' (and everything under it)
creating /usr/local/lib/python2.6/site-packages/django_pagination-1.0.5-py2.6.egg
Extracting django_pagination-1.0.5-py2.6.egg to /usr/local/lib/python2.6/site-packages
django-pagination 1.0.5 is already the active version in easy-install.pth

Installed /usr/local/lib/python2.6/site-packages/django_pagination-1.0.5-py2.6.egg
Processing dependencies for django-pagination==1.0.5
Searching for setuptools==0.6c11
Best match: setuptools 0.6c11
Processing setuptools-0.6c11-py2.6.egg
setuptools 0.6c11 is already the active version in easy-install.pth
Installing easy_install script to /usr/local/bin
Installing easy_install-2.6 script to /usr/local/bin

Using /usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
Finished processing dependencies for django-pagination==1.0.5

インストール完了です。



settings.pyを変更します。

次は設定変更です。

#vi urls.py

INSTALLED_APPS = (
    'pagination',
)

MIDDLEWARE_CLASSES = (
     'pagination.middleware.PaginationMiddleware',
)


TEMPLATE_CONTEXT_PROCESSORS = (
     'django.core.context_processors.i18n',
     'django.core.context_processors.request',
)

PAGINATION_DEFAULT_PAGINATION = 2

テンプレートを編集します。

#vi ./templates/hoge.html

{% load pagination_tags %}

{% autopaginate list 20 %}
    {% for item in list %}
        
    {% endfor %}
{% paginate %}

これで利用できるようになります。

例外:テンプレートエラー

TemplateSyntaxError at /hoge/
Caught KeyError while rendering: 'request'

のようなエラーが出る場合は、settings.pyの
TEMPLATE_CONTEXT_PROCESSORSを確認してください。

おまけ

TEMPLATE_CONTEXT_PROCESSORSが上書きされて、エラーが出る場合は、
次のように設定しなおしてみてください。

from django.conf import global_settings                                            
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (   
    'django.core.context_processors.i18n',
    'django.core.context_processors.request',
)   

これでページ送りが使えるようになります。便利です。