Zobrazení dat pomocí obecných zobrazení
Systém obecných zobrazení v Django zjednodušuje vytváření opakujícího se kódu. Běžné operace, které provádíte v aplikaci řízené daty, sdílejí stejný vzor. Pokud chcete například zobrazit jednotlivé položky podle ID nebo primárního klíče, pracovní postup je vždy:
- Načtěte položku z databáze podle ID.
- Pokud se položka nenajde, vrátí hodnotu 404.
- Pokud se položka najde, předejte ji do šablony pro zobrazení.
Obecný systém zobrazení bere na vědomí tuto skutečnost a poskytuje třídy, které můžete použít, které obsahují základní kód již napsaný. Dědíte z příslušné třídy, nastavíte několik vlastností a pak zaregistrujete odpovídající cestu v urLconf. Zbytek se o vás postará!
Django obsahuje dvě obecná zobrazení pro zobrazení dat: DetailView
a ListView
.
DetailView pro podrobnosti položky
Obecné zobrazení DetailView
slouží k zobrazení stránky podrobností pro položku. DetailView
načte položku určenou model
primárním klíčem a předá ji šabloně. Můžete nastavit template_name
název šablony, která se má použít. Výchozí hodnota je <model>_detail.html
. Nakonec můžeme nastavit context_object_name
název proměnné, kterou chceme použít v naší šabloně.
Pokud chcete vytvořit podrobné zobrazení pomocí obecného zobrazení pro psa, můžete použít následující kód:
from . import models
from django.views import generic
class DogDetailView(generic.DetailView):
model = models.Dog
template_name = 'dog_detail.html'
context_object_name = 'dog'
Registrace DogDetailView
se podobá jakékoli jiné path
položce. Klíčovou věcí, která zajistí, že zahrnete, je parametr s názvem pk
. Django používá tuto konvenci k identifikaci primárního klíče. Všimněte si také, že metodu as_view()
používáme k převodu třídy do zobrazení.
path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')
ListView pro seznam položek
Obecné zobrazení ListView
se chová podobným způsobem jako DetailView
. Název proměnné můžete nastavit context_object_name
v zobrazení a template_name
pro název šablony.
Hlavním rozdílem je, že je navržený tak, ListView
aby fungoval s libovolnou formou dotazu, který vrací více položek. V důsledku toho musíte funkci přepsat get_queryset
. Funkciget_queryset
volá obecný systém zobrazení, který načte položky z databáze, což umožňuje podle potřeby objednat nebo filtrovat položky.
Pokud chcete vytvořit zobrazení pro zobrazení seznamu všech útulek pomocí obecného zobrazení ListView
, můžete použít následující kód:
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()
Registrace zobrazení se provádí mnohem stejně jako naše DetailView
.
path('', ShelterListView.as_view(), name='shelter_list')