(Python2.7, Djnago1.4)
Djnagoチュートリアルその4で出来上がったアプリに追加する形で。
templates/polls/list.html
{% for poll in polls %} {# Each "poll" is a poll model object. #} {{ poll.question|upper }}<br /> {% endfor %} <div class="pagination"> <span class="step-links"> {% if polls.has_previous %} <a href="?page={{ polls.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ polls.number }} of {{ polls.paginator.num_pages }} </span> {% if polls.has_next %} <a href="?page={{ polls.next_page_number }}">next</a> {% endif %} </span> </div>
polls/urls.py
urlpatterns = patterns('', url(r'^$', ListView.as_view( #queryset=Poll.objects.order_by('-pub_date')[:5], queryset=Poll.objects.order_by('-pub_date'), context_object_name='latest_poll_list', template_name='polls/index.html')), : url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'), url(r'^listting/$', 'polls.views.listing'), # add )
polls/views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger : def listing(request): poll_list = Poll.objects.all() paginator = Paginator(poll_list, 25) # Show 25 polls per page page = request.GET.get('page') try: polls = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. polls = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. polls = paginator.page(paginator.num_pages) return render_to_response('polls/list.html', {"polls": polls})
確認用データ投入
$ python manage.py shell >>> [Poll(question="question%d" % i, pub_date=timezone.now()).save() for i in range(50)] >>> Poll.objects.all()