Zobrazení dat pomocí obecných zobrazení

Dokončeno

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:

  1. Načtěte položku z databáze podle ID.
  2. Pokud se položka nenajde, vrátí hodnotu 404.
  3. 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')