(python2.7, django1.5)
pipにあるパッケージとか使わずに何とかしてみたい。
View
paginate.py
新規作成する。
とりあえず settings.py とかあるディレクトリに置く
- apps/paginate.py
#!/usr/bin/env python # *-# -*- coding: utf-8 -*- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def paginate(request, queryset, per_page_num): paginator = Paginator(queryset, per_page_num) page = request.GET.get('page') try: page_objects = paginator.page(page) except PageNotAnInteger: page_objects = paginator.page(1) except EmptyPage: page_objects = paginator.paginator(paginator.num_pages) return page_objects
利用するアプリのviews.pyに書く
for example
- says/views.py
2ヵ所いじる感じ
from django.shortcuts import render_to_response from says.models import Say from apps.paginate import paginate #<- ここ def index(request): says = Say.objects.all() return render_to_response( 'says/index.html', { 'says': paginate(request, says, 10), #<- ここ })
Template
共用するページネイトの表示
新規作成する。
- templates/paginate.html
<div class="paginate"> {% if page_objects.has_previous %} <span><a href="?page={{ page_objects.previous_page_number }}">previous</a></span> {% endif %} {% for page_num in page_objects.paginator.page_range %} {% if page_objects.number == page_num %} <span>{{ page_num }}</span> {% else %} <span><a href="?page={{ page_num }}">{{ page_num }}</a></span> {% endif %} {% endfor %} {% if page_objects.has_next %} <span><a href="?page={{ page_objects.next_page_number }}">next</a></span> {% endif %} </div>
利用するページにincludeタグをいれる
for exsample
- templates/says/index.html
<ul> {% for say in says %} <li>{{ say.message }}</li> {% endfor %} </ul> {% include "paginate.html" with page_objects=says %}