Sayfalama
Coddy'nin Django Journey'sinin Sınıf Tabanlı Görünümler bölümünün bir parçası. Ders 8 / 18.
İşler sayfası tüm işleri aynı anda gösterir; bin iş ekrana sığmaz. Sayfalama, bir listeyi aralarında bağlantılar bulunan sayfalara böler. ListView, bölme işlemini tek bir öznitelikle yapar: sayfa başına satır sayısını belirleyen paginate_by.
Bir tarif listesinde paginate_by = 20 kullanıldığında, /recipes/ ilk 20 tarifi, /recipes/?page=2 sonraki 20 tarifi gösterir; son sayfayı aşan bir sayfa isteği ise 404 yanıtı verir. Şablonun listesi yalnızca o sayfanın satırlarını içerir ve şablona ayrıca mevcut sayfa olan is_paginated ile page_obj da aktarılır.
Bağlantıları yazmak sana kalmış. page_obj, number, paginator.num_pages, has_next, next_page_number, has_previous ve previous_page_number değerlerini bilir:
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">More recipes</a>
{% endif %}Her bağlantının etrafındaki testi koru: son sayfada next_page_number bir hata oluşturarak sayfanın çökmesine neden olur.
Görev
Kolayİş ilanlarını sayfa başına 5 tane gösterin:
JobListViewiçinde, sayfa başına 5 satır.job_list.htmliçinde, listenin altında<nav class="pages">, birPreviousbağlantısı,Page 1 of 3metni (gerçek sayılarla) ve birNextbağlantısı bulunsun. Her bağlantı yalnızca ilgili sayfa varsa gösterilsin.
Run'a basın, /jobs/ sayfasını açın ve Next'e basın.
Kendin dene
from django.views.generic import DetailView, ListView, TemplateView
from .models import Job
class HomeView(TemplateView):
template_name = "jobs/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["count"] = Job.objects.count()
context["latest"] = Job.objects.order_by("-posted").first()
return context
class AboutView(TemplateView):
template_name = "jobs/about.html"
class JobListView(ListView):
model = Job
context_object_name = "jobs"
ordering = ["-posted"]
def get_queryset(self):
jobs = super().get_queryset()
city = self.request.GET.get("city")
if city:
jobs = jobs.filter(city=city)
return jobs
class JobDetailView(DetailView):
model = Job
Sınıf Tabanlı Görünümler bölümündeki tüm dersler
Kendi başına pratik yap: Django playground