صفحه بندی با استفاده از FBV
سلام
کد زیر مربوط به پیاده سازی صفحه بندی با استفاده از توابع است.
boards/views.py (مشاهده کد کامل)
from django.db.models import Count from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import get_object_or_404, render from django.views.generic import ListView from .models import Board def board_topics(request, pk): board = get_object_or_404(Board, pk=pk) queryset = board.topics.order_by('-last_updated').annotate(replies=Count('posts') - 1) page = request.GET.get('page', 1) paginator = Paginator(queryset, 20) try: topics = paginator.page(page) except PageNotAnInteger: # fallback to the first page topics = paginator.page(1) except EmptyPage: # probably the user tried to add a page number # in the url, so we fallback to the last page topics = paginator.page(paginator.num_pages) return render(request, 'topics.html', {'board': board, 'topics': topics})
حالا ترفند اصلی این است که صفحات را با استفاده از کامپوننت صفحه بندی در بوت استرپ ۴ نمایش دهیم. این کار زمان زیادی می برد و می توانید با مراجعه به کدهای آن متوجه چگونگی پیاده سازی اش شوید. در این پیاده سازی اتفاق خاصی نیفتاده و از همان متدهایی استفاده کرده ایم که در قبل با هم دیده ایم. ضمناً topics
دیگر در نقش کوئریست نبوده و این کار را متغیر paginator.Page
انجام می دهد.
درست بعد از جدول html مربوط به تاپیک ها می توانیم کامپوننت صفحه بندی را رندر کنیم.
templates/topics.html (مشاهده کد کامل)
{% if topics.has_other_pages %} <nav aria-label="Topics pagination" class="mb-4"> <ul class="pagination"> {% if topics.has_previous %} <li class="page-item"> <a class="page-link" href="?page={{ topics.previous_page_number }}">Previous</a> </li> {% else %} <li class="page-item disabled"> <span class="page-link">Previous</span> </li> {% endif %} {% for page_num in topics.paginator.page_range %} {% if topics.number == page_num %} <li class="page-item active"> <span class="page-link"> {{ page_num }} <span class="sr-only">(current)</span> </span> </li> {% else %} <li class="page-item"> <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a> </li> {% endif %} {% endfor %} {% if topics.has_next %} <li class="page-item"> <a class="page-link" href="?page={{ topics.next_page_number }}">Next</a> </li> {% else %} <li class="page-item disabled"> <span class="page-link">Next</span> </li> {% endif %} </ul> </nav> {% endif %}
ترجمۀ اختصاصی توسط تمدن
مطلب بعدی: صفحه بندی با استفاده از GCBV
مطلب قبلی: صفحه بندی و شماره گذاری صفحات
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگو شرکت کنید؟نظری بدهید!