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})
あとでこれで書き直そう。