Algemene weergaven gebruiken om gegevens weer te geven
Het algemene weergavesysteem in Django stroomlijnt het maken van terugkerende code. De algemene bewerkingen die u uitvoert in een gegevensgestuurde toepassing delen hetzelfde patroon. Als u bijvoorbeeld een afzonderlijk item wilt weergeven op basis van de id of primaire sleutel, is de werkstroom altijd:
- Laad het item uit de database op id.
- Als het item niet wordt gevonden, retourneert u een 404.
- Als het item wordt gevonden, geeft u het item door aan een sjabloon voor weergave.
Het algemene weergavesysteem erkent dit feit en biedt klassen die u kunt gebruiken die de kerncode bevatten die al zijn geschreven. U neemt over van de juiste klasse, stelt een aantal eigenschappen in en registreert vervolgens een geschikt pad in uw URLLconf. De rest wordt voor u geregeld!
Django bevat twee algemene weergaven voor het weergeven van gegevens: DetailView
en ListView
.
DetailWeergave voor itemdetails
De algemene weergave DetailView
wordt gebruikt om een detailpagina voor een item weer te geven. DetailView
haalt het item op voor de opgegeven model
door de primaire sleutel en geeft het door aan de sjabloon. U kunt instellen template_name
op de naam van de sjabloon die moet worden gebruikt. De standaardwaarde is <model>_detail.html
. Ten slotte kunnen we instellen context_object_name
op de naam van de variabele die we in onze sjabloon willen gebruiken.
Als u een detailweergave wilt maken met behulp van de algemene weergave voor een hond, kunt u de volgende code gebruiken:
from . import models
from django.views import generic
class DogDetailView(generic.DetailView):
model = models.Dog
template_name = 'dog_detail.html'
context_object_name = 'dog'
Registreren is vergelijkbaar met andere path
vermeldingenDogDetailView
. Het belangrijkste om ervoor te zorgen dat u een parameter met de naam pk
opneemt. Django gebruikt deze conventie om de primaire sleutel te identificeren. U ziet ook dat we de as_view()
methode gebruiken om de klasse te converteren naar een weergave.
path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')
ListView voor een lijst met items
De algemene weergave ListView
gedraagt zich op een vergelijkbare manier als DetailView
. U kunt instellen context_object_name
voor de naam van de variabele in de weergave en template_name
voor de naam van de sjabloon.
Het belangrijkste verschil is dat ListView
is ontworpen om te werken met elke vorm van een query die meerdere items retourneert. Als gevolg hiervan moet u de get_queryset
functie overschrijven. De functieget_queryset
wordt aangeroepen door het algemene weergavesysteem om de items op te halen uit de database, zodat u uw items indien nodig kunt orden of filteren.
Als u een weergave wilt maken om de lijst met alle schuilplaatsen weer te geven met behulp van de algemene weergave ListView
, kunt u de volgende code gebruiken:
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()
Het registreren van de weergave wordt veel op dezelfde manier uitgevoerd als onze DetailView
.
path('', ShelterListView.as_view(), name='shelter_list')