DjangoでPaginateしたい

Djangoで何かを一覧で見るときにPaginateしたいのだが、例によって時間かけずに簡単にやりたい。

https://medium.com/@kjmczk/django-pagination-7c497995561e

こちらなど参考になったが、CSSがどこでどう設定したらきれいになるのかよくわからないのと、あとget_query_setとか、get_contextとか、この辺がやっぱりわかりにくい。一応なんかそれっぽく動いたけども、コードのメンテがめんどくさそうだ。なんかやろうとするたびに調べないといけなさそう。

結局Paginator的なSnippetはtemplatesに以下くらいを作って

{% if is_paginated %}
<p class="paginator">
    {% for num in paginator.page_range %}
    {% if page_obj.number == num %}
    <!-- <li class="page-item active"> -->
      <span class="this-page">{{ num }}</span>
    <!-- </li> -->
    {% else %}
    <!-- <li class="page-item"> -->
      <a class="page-link" href="?page={{ num }}">{{ num }}</a>
    <!-- </li> -->
    {% endif %}
    {% endfor %}
{% endif %}

Djangoの公式マニュアル見たら、GenericなListView使わずにこうやって書く方法が見つかった。

from django.core.paginator import Paginator
from django.shortcuts import render

from myapp.models import Contact

def listing(request):
    contact_list = Contact.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page.

    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    return render(request, 'list.html', {'page_obj': page_obj})

あとでこれで書き直そう。

Leave a Comment

Your email address will not be published. Required fields are marked *