Paginasi
Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 8 dari 18.
Halaman pekerjaan menampilkan semua pekerjaan sekaligus, dan seribu pekerjaan tidak akan muat. Paginasi membagi list menjadi beberapa halaman dengan tautan di antaranya. ListView membagi list menggunakan satu atribut, paginate_by, yaitu jumlah baris per halaman.
Dengan paginate_by = 20 pada list resep, /recipes/ menampilkan 20 resep pertama, /recipes/?page=2 menampilkan 20 resep berikutnya, dan halaman setelah halaman terakhir menghasilkan respons 404. List dalam template hanya memuat baris di halaman ini, dan template juga mendapatkan is_paginated serta page_obj, yaitu halaman saat ini.
Kamu yang menulis tautannya. page_obj mengetahui number, paginator.num_pages, has_next, next_page_number, has_previous, dan previous_page_number:
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">More recipes</a>
{% endif %}Sertakan pemeriksaan di sekitar setiap tautan: di halaman terakhir, next_page_number menimbulkan error yang membuat halaman mengalami crash.
Tantangan
MudahTampilkan lowongan 5 per halaman:
- Di
JobListView, 5 baris per halaman. - Di
job_list.html, di bawah daftar, tampilkan<nav class="pages">dengan tautanPrevious, teksPage 1 of 3(angka sebenarnya), dan tautanNext. Setiap tautan hanya ditampilkan jika halamannya tersedia.
Tekan Jalankan, buka /jobs/, lalu tekan Next.
Coba sendiri
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
Semua pelajaran di View Berbasis Class
2Tampilan Generik untuk Menampilkan Data
ListViewDetailViewLatihan sendiri: Playground Django