Menggunakan tampilan generik untuk menampilkan data

Selesai

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:

  1. Muat item dari database menurut ID.
  2. Jika item tidak ditemukan, kembalikan 404.
  3. 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 ListViewgenerik, 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')