Általános nézetek használata az adatok megjelenítéséhez

Befejeződött

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ő:

  1. Töltse be az elemet az adatbázisból azonosító alapján.
  2. Ha az elem nem található, adjon vissza egy 404-et.
  3. 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 ListViewhaszná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')