Wyświetlanie danych przy użyciu widoków ogólnych
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:
- Załaduj element z bazy danych według identyfikatora.
- Jeśli element nie zostanie znaleziony, zwróć wartość 404.
- 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 ListView
ogó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')