Pagination در Django: راهنمای کامل صفحه‌بندی داده‌ها با Paginator، ListView و Viewهای تابعی

این مقاله سیستم Pagination در Django را توضیح می‌دهد. موضوعاتی مانند کلاس Paginator، نحوهٔ تقسیم داده‌ها به صفحات، ویژگی‌ها و متدهای Page object، صفحه‌بندی در ListView، و استفاده از Paginator در viewهای تابعی بررسی می‌شوند.

Pagination Django، صفحه‌بندی جنگو، Paginator، Page objectListView paginationget_page، paginate_by

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۲۴ اسفند ۱۴۰۴

مقدمه

Pagination یا صفحه‌بندی یکی از نیازهای رایج در وب‌اپلیکیشن‌هاست؛ مخصوصاً زمانی که داده‌ها زیاد هستند و باید در چند صفحه نمایش داده شوند. Django ابزارهای سطح بالا و سطح پایین برای مدیریت صفحه‌بندی ارائه می‌دهد. در قلب این سیستم، کلاس Paginator قرار دارد.


کلاس Paginator

کلاس Paginator مسئول تقسیم داده‌ها به صفحات است. این داده‌ها می‌توانند:

  • لیست یا tuple
  • QuerySet جنگو
  • هر شیء دارای count() یا __len__()

مثال پایه


from django.core.paginator import Paginator

objects = ["john", "paul", "george", "ringo"]
p = Paginator(objects, 2)

ویژگی‌های مهم:

  • p.count → تعداد کل آیتم‌ها
  • p.num_pages → تعداد صفحات
  • p.page_range → بازهٔ صفحات

دریافت یک صفحه


page1 = p.page(1)
page1.object_list  # ['john', 'paul']

متدهای Page object

  • has_next()
  • has_previous()
  • has_other_pages()
  • next_page_number()
  • previous_page_number()
  • start_index()
  • end_index()

اگر شمارهٔ صفحه نامعتبر باشد، خطای EmptyPage رخ می‌دهد.


صفحه‌بندی در ListView

کلاس ListView به‌صورت داخلی از Paginator پشتیبانی می‌کند. برای فعال‌سازی صفحه‌بندی کافی است paginate_by را تنظیم کنید.


from django.views.generic import ListView
from myapp.models import Contact

class ContactListView(ListView):
    paginate_by = 2
    model = Contact

این کار دو متغیر به context اضافه می‌کند:

  • paginator
  • page_obj

نمونهٔ قالب (template)


{% for contact in page_obj %}
    {{ contact.full_name|upper }}
{% endfor %}

استفاده از Paginator در Viewهای تابعی

می‌توانید Paginator را مستقیماً در viewهای معمولی استفاده کنید.


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)

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

در قالب list.html می‌توانید همان کد صفحه‌بندی ListView را استفاده کنید.


جمع‌بندی

Pagination در Django بسیار ساده و قدرتمند است. با استفاده از Paginator، ListView و get_page() می‌توانید داده‌های حجیم را به‌صورت صفحه‌بندی‌شده نمایش دهید و تجربهٔ کاربری بهتری ایجاد کنید.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

فریم‌ورک Tasks در Django: راهنمای کامل اجرای کارهای پس‌زمینه در Django 6.0

Django 6.0 فریم‌ورک Tasks را معرفی کرده است؛ سیستمی داخلی برای تعریف و صف‌بندی کارهای پس‌زمینه خارج از چرخهٔ request–response. این مقاله نحوهٔ کار Tasks، پیکربندی backendها، تعریف و enqueue کردن Taskها، استفاده از context، و ادغام با سیستم‌های Worker خارجی را توضیح می‌دهد.

ادامه

پشتیبانی Asynchronous در Django: راهنمای کامل Async Views، ORM، Middleware، عملکرد و ایمنی

این مقاله پشتیبانی Django از برنامه‌نویسی غیرهم‌زمان (async) را توضیح می‌دهد. موضوعاتی مانند async views، اجرای Django تحت ASGI، رفتار middleware، قابلیت‌های ORM غیرهم‌زمان، sync_to_async، مدیریت قطع اتصال، نکات عملکردی، و مکانیزم‌های ایمنی Django برای جلوگیری از استفادهٔ ناامن async بررسی می‌شوند.

ادامه

System Check Framework در Django: راهنمای کامل نوشتن، ثبت، اجرا و تست چک‌های سیستمی

System Check Framework در Django مجموعه‌ای از بررسی‌های استاتیک برای تشخیص مشکلات رایج در پروژه است. این مقاله نحوهٔ اجرای چک‌ها، نوشتن چک‌های سفارشی، مدیریت پیام‌ها، برچسب‌گذاری چک‌ها، افزودن چک به مدل‌ها و فیلدها، و نوشتن تست‌های واحد و یکپارچه برای چک‌ها را توضیح می‌دهد.

ادامه

سیگنال‌ها در Django: راهنمای کامل استفاده، اتصال، ارسال و مدیریت Signalها

این مقاله سیستم سیگنال‌های Django را توضیح می‌دهد؛ مکانیزمی برای اطلاع‌رسانی رویدادها بین بخش‌های مختلف برنامه بدون ایجاد وابستگی مستقیم. موضوعاتی مانند نحوهٔ اتصال receiverها، استفاده از decorator، مدیریت senderهای خاص، محل مناسب قرارگیری کد سیگنال‌ها، هشدارهای مهم، و بهترین شیوه‌ها بررسی می‌شوند.

ادامه

آشنایی کامل با Django Settings: پیکربندی، مدیریت محیط، و بهترین شیوه‌ها

این مقاله یک راهنمای جامع دربارهٔ سیستم تنظیمات در Django ارائه می‌دهد. موضوعاتی مانند ساختار فایل تنظیمات، نحوهٔ تعیین DJANGO_SETTINGS_MODULE، استفاده از settings در کد، امنیت، پیکربندی دستی با configure()، استفادهٔ مستقل از Django با django.setup() و ایجاد تنظیمات سفارشی بررسی می‌شوند.

ادامه

سریال‌سازی و دسریال‌سازی در Django: راهنمای کامل کار با Serialization Framework

این مقاله سیستم سریال‌سازی Django را توضیح می‌دهد؛ از نحوهٔ تبدیل مدل‌ها به JSON، XML، YAML و JSONL گرفته تا دسریال‌سازی داده‌ها، سریال‌سازی فیلدهای انتخابی، کار با مدل‌های ارث‌بری، مدیریت روابط، و نکات مهم هنگام ذخیرهٔ داده‌های دسریال‌شده.

ادامه