Paginate

🟢 Python Django
投稿日: 2026年4月20日9:44
views.py

from django.core.paginator import Paginator

def top(request):
 snippets = Snippet.objects.order_by('-created_at',)
#ページネーション
 paginator=Paginator(snippets, 10)
#urlからページのパラメータ取得 request.GET.get()
 page_number = request.GET.get('page')
#page番号からページオブジェクト作成
 page_obj=paginator.get_page(page_number)
 context = {"page_obj": page_obj}
 return render(request, "snippets/top.html", context)

def snippet_detail(request, snippet_id, page_id):
    snippet = get_object_or_404(Snippet, pk=snippet_id)
    comments = Comment.objects.filter(commented_to=snippet_id).all()
    comment_form = CommentForm()

    return render(request, "snippets/snippet_detail.html", {
        'snippet': snippet,
        'comments': comments,
        'comment_form': comment_form,
        'pagenum':page_id
    })

----------------------------------------------------------------------------------------------------
urls.py

path("<int:snippet_id>/<int:page_id>", views.snippet_detail, name="snippet_detail"),
path("<int:snippet_id>/edit/<int:page_id>", views.snippet_edit, name="snippet_edit"),

----------------------------------------------------------------------------------------------------
top.html(Paging Page )
移動部分
<div class="paginatearea">
    <div class="prepage">
        {% if page_obj.has_previous %}
            <a href='?page=1' class="pagebtn">  </a> 
            <a href='?page={{ page_obj.previous_page_number }}' class="pagebtn"> ◀️ </a>
            <a href='?page={{ page_obj.previous_page_number }}'> Previous </a>
        {% else %}
            &emsp;
        {% endif %}
    </div>
    <div class="pageobj">
        {{ page_obj }}
    </div>
    <div class="nextpage">
        {% if page_obj.has_next %}
            <a href='?page={{ page_obj.next_page_number }}'>Next </a>
            <a href='?page={{ page_obj.next_page_number }}' class="pagebtn"> ▶️ </a>
            <a href='?page={{ page_obj.paginator.num_pages }}' class="pagebtn">  </a> 
        {% else %}
            &emsp;
        {% endif %}
    </div>
</div>


リンク部分
<a href="{% url 'snippet_detail' snippet.id page_obj.number %}">{{ snippet.title }}</a></th>

snippet_detail.html

戻るリンク部分
<div class="snippet-back"><a href='/?page={{ pagenum }}'>🔙 Back to Menu</a></div>
複数のパラメータ対応
パラベータを次に渡せばよいだけ。

<a href='/?page={{ pagenum }}'>はurls.pyに登録がないが。
No Comment