Wyświetlanie danych przy użyciu widoków ogólnych

Ukończone

System widoków ogólnych w systemie Django usprawnia tworzenie powtarzalnego kodu. Typowe operacje wykonywane w aplikacji opartej na danych mają ten sam wzorzec. Na przykład aby wyświetlić pojedynczy element według jego identyfikatora lub klucza podstawowego, przepływ pracy jest zawsze:

  1. Załaduj element z bazy danych według identyfikatora.
  2. Jeśli element nie zostanie znaleziony, zwróć wartość 404.
  3. Jeśli element zostanie znaleziony, przekaż element do szablonu do wyświetlenia.

System widoków ogólnych potwierdza ten fakt i udostępnia klasy, których można użyć, które zawierają już napisany kod podstawowy. Dziedziczysz z odpowiedniej klasy, ustawiasz kilka właściwości, a następnie rejestrujesz odpowiednią ścieżkę w pliku URLconf. Reszta jest zadbana o Ciebie!

Platforma Django zawiera dwa ogólne widoki wyświetlania danych: DetailView i ListView.

DetailView — szczegóły elementu

Widok ogólny DetailView służy do wyświetlania strony szczegółów dla elementu. DetailView pobiera element określony model przez klucz podstawowy i przekazuje go do szablonu. Możesz ustawić template_name nazwę szablonu do użycia. Wartość domyślna to <model>_detail.html. Na koniec możemy ustawić context_object_name nazwę zmiennej, której chcemy użyć w naszym szablonie.

Aby utworzyć widok szczegółów przy użyciu widoku ogólnego dla psa, możesz użyć następującego kodu:

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 Rejestrowanie jest podobne do dowolnego innego path wpisu. Kluczową rzeczą, aby upewnić się, że uwzględnisz, jest parametr o nazwie pk. Django używa tej konwencji do identyfikowania klucza podstawowego. Zauważysz również, że użyjemy as_view() metody , aby przekonwertować klasę na widok.

path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')

ListView — lista elementów

Ogólny widok ListView zachowuje się w podobny sposób do DetailView. Możesz ustawić context_object_name nazwę zmiennej w widoku i template_name nazwę szablonu.

Podstawowa różnica polega na tym, że ListView jest przeznaczona do pracy z dowolną formą zapytania zwracającego wiele elementów. W związku z tym należy zastąpić get_queryset funkcję . Funkcjaget_queryset jest wywoływana przez ogólny system widoków w celu pobrania elementów z bazy danych, co pozwala porządkować lub filtrować elementy zgodnie z potrzebami.

Aby utworzyć widok w celu wyświetlenia listy wszystkich schronów przy użyciu widoku ListViewogólnego, możesz użyć następującego kodu:

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()

Zarejestrowanie widoku odbywa się w taki sam sposób, jak w przypadku naszego DetailView.

path('', ShelterListView.as_view(), name='shelter_list')