Általános nézetek használata az adatok megjelenítéséhez
A Django általános nézetrendszere leegyszerűsíti az ismétlődő kód létrehozását. Az adatvezérelt alkalmazásokban végrehajtott gyakori műveletek ugyanazt a mintát követik. Ha például egy adott elemet azonosító vagy elsődleges kulcs alapján szeretne megjeleníteni, a munkafolyamat mindig a következő:
- Töltse be az elemet az adatbázisból azonosító alapján.
- Ha az elem nem található, adjon vissza egy 404-et.
- Ha az elem megtalálható, adja át az elemet egy megjelenítendő sablonnak.
Az általános nézetrendszer elismeri ezt a tényt, és olyan osztályokat biztosít, amelyek a már megírt alapvető kódot tartalmazzák. A megfelelő osztálytól örökölhet, beállíthat néhány tulajdonságot, majd regisztrálhat egy megfelelő elérési utat az URLconfban. A többi gondoskodik rólad!
A Django két általános nézetet tartalmaz az adatok megjelenítéséhez: DetailView
és ListView
.
DetailView elem részletességéhez
Az általános nézet DetailView
egy elem részletes lapjának megjelenítésére szolgál. DetailView
Lekéri az elsődleges kulcs által megadott model
elemet, és átadja a sablonnak. Beállíthatja template_name
a használni kívánt sablon nevét. Az alapértelmezett érték <model>_detail.html
. Végül megadhatja context_object_name
a sablonban használni kívánt változó nevét.
Ha egy kutya általános nézetével szeretne részletes nézetet létrehozni, használja a következő kódot:
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
A regisztráció minden más path
bejegyzéshez hasonló. A legfontosabb dolog, hogy biztosítsa, hogy tartalmazza a paraméter neve pk
. Django ezt az egyezményt használja az elsődleges kulcs azonosítására. Azt is láthatja, hogy az osztály nézetté alakításához a as_view()
metódust használjuk.
path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')
Listanézet elemek listájához
Az általános nézet ListView
hasonlóan viselkedik, mint a DetailView
. context_object_name
Beállíthatja a változó nevét a nézetben és template_name
a sablon nevét.
Az elsődleges különbség az, hogy úgy tervezték, hogy ListView
működjön bármilyen típusú lekérdezés, amely több elemet ad vissza. Ennek eredményeképpen felül kell bírálnia a függvényt get_queryset
. A függvénytget_queryset
az általános nézetrendszer hívja meg, hogy lekérje az elemeket az adatbázisból, így igény szerint rendezheti vagy szűrheti az elemeket.
Ha az összes menedékhely listáját az általános nézet ListView
használatával szeretné megjeleníteni, a következő kódot használhatja:
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()
A nézet regisztrálása ugyanúgy történik, mint a mi DetailView
.
path('', ShelterListView.as_view(), name='shelter_list')