Menggunakan tampilan generik untuk menampilkan data
Sistem tampilan generik di Django menyederhanakan pembuatan kode berulang. Operasi umum yang Anda lakukan dalam aplikasi berbasis data memiliki pola yang sama. Misalnya, untuk menampilkan item individual dengan ID atau kunci primernya, alur kerja selalu:
- Muat item dari database menurut ID.
- Jika item tidak ditemukan, kembalikan 404.
- Jika item ditemukan, teruskan item ke templat untuk ditampilkan.
Sistem tampilan generik mengakui fakta ini dan menyediakan kelas yang dapat Anda gunakan yang berisi kode inti yang sudah ditulis. Anda mewarisi dari kelas yang sesuai, mengatur beberapa properti, lalu mendaftarkan jalur yang sesuai di URLconf Anda. Sisanya diurus untukmu!
Django menyertakan dua tampilan generik untuk menampilkan data: DetailView
dan ListView
.
DetailView untuk detail item
Tampilan DetailView
generik digunakan untuk menampilkan halaman detail untuk item. DetailView
mengambil item untuk yang ditentukan model
oleh kunci primer dan meneruskannya ke templat. Anda dapat mengatur template_name
ke nama templat yang akan digunakan. Default adalah <model>_detail.html
. Terakhir, kita dapat mengatur context_object_name
ke nama variabel yang ingin kita gunakan dalam templat kita.
Untuk membuat tampilan detail dengan menggunakan tampilan generik untuk anjing, Anda dapat menggunakan kode berikut:
from . import models
from django.views import generic
class DogDetailView(generic.DetailView):
model = models.Dog
template_name = 'dog_detail.html'
context_object_name = 'dog'
DogDetailView
Mendaftar mirip dengan entri lainnyapath
. Hal utama untuk memastikan Anda menyertakan adalah parameter bernama pk
. Django menggunakan konvensi ini untuk mengidentifikasi kunci primer. Anda juga akan mencatat bahwa kami menggunakan as_view()
metode untuk mengonversi kelas menjadi tampilan.
path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')
ListView untuk daftar item
Tampilan ListView
generik berulah dengan cara yang mirip dengan DetailView
. Anda dapat mengatur context_object_name
untuk nama variabel dalam tampilan dan template_name
untuk nama templat.
Perbedaan utamanya adalah yang ListView
dirancang untuk bekerja dengan segala bentuk kueri yang mengembalikan beberapa item. Akibatnya, Anda harus mengambil get_queryset
alih fungsi. Fungsiget_queryset
ini dipanggil oleh sistem tampilan generik untuk mengambil item dari database, yang memungkinkan Anda untuk memesan atau memfilter item Anda sesuai kebutuhan.
Untuk membuat tampilan untuk menampilkan daftar semua tempat penampungan dengan menggunakan tampilan ListView
generik, Anda dapat menggunakan kode berikut:
from . import models
from django.views import generic
class ShelterListView(generic.ListView):
template_name = 'shelter_list.html'
context_object_name = 'shelters'
def get_queryset(self):
return models.Shelter.objects.all()
Mendaftarkan tampilan dilakukan dengan cara yang sama seperti kami DetailView
.
path('', ShelterListView.as_view(), name='shelter_list')