To jest stara wersja strony!
Widoki programujemy w pliku views.py. Możemy to robić w oparciu o funkcje lub klasy. Możemy również łączyć obie metody.
views.py
W Django zarówno funkcje widoków (function-based views, FBV) jak i klasy widoków (class-based views, CBV) są obsługiwane i powszechnie używane. Wybór między nimi zależy od preferencji programisty, struktury projektu oraz złożoności funkcjonalnej widoku. Oto kilka porównań między FBV a CBV:
1. Prostota:
2. Kontrola nad przepływem:
3. Łatwiejsze do zastosowania w prostych przypadkach:
1. Zorganizowany kod:
2. Dziedziczenie i Mieszanie Klas (Class Inheritance and Mixins):
3. Wbudowane Klasy Widoków:
4. Obywatele Wielokrotnego Użycia (Reusable Components):
5. Rozdzielenie Odpowiedzialności (Separation of Concerns):
W praktyce, wybór między FBV a CBV zazwyczaj zależy od indywidualnych preferencji programisty, specyfiki projektu oraz wymagań funkcjonalnych danego widoku. W przypadku prostych widoków FBV mogą być bardziej intuicyjne, podczas gdy w przypadku bardziej złożonych widoków CBV oferują bardziej zorganizowaną strukturę kodu. Warto eksperymentować z obiema formami i wybrać tę, która lepiej odpowiada konkretnym potrzebom projektu.
Nie ma jednoznacznej odpowiedzi na to pytanie, ponieważ wybór między klasami widoków (CBV) a funkcjami widoków (FBV) zależy od wielu czynników, a ostateczna decyzja powinna być uzależniona od kontekstu projektu, umiejętności zespołu, preferencji programistycznych i wymagań funkcjonalnych. Oto kilka rozważań, które mogą pomóc w dokonaniu wyboru:
1. Prostota i czytelność kodu:
2. Złożoność funkcjonalna:
3. Rozszerzalność i ponowne użycie:
4. Wbudowane Klasy Widoków:
5. Obsługa Metod HTTP:
6. Preferencje i Doświadczenie Zespołu:
Nie ma jednej „poprawnej” odpowiedzi, i obie formy mają swoje miejsce w ekosystemie Django. Zalecamy dostosowanie wyboru do konkretnych potrzeb projektu, a także skonsultowanie się z zespołem programistycznym, aby wybrać podejście, które najlepiej pasuje do kontekstu danego projektu. Warto także eksperymentować z obiema formami, aby lepiej zrozumieć, z którą bardziej komfortowo pracujesz i która lepiej spełnia wymagania projektu.
Nie ma jednoznacznej prognozy, czy w przyszłości będzie się odchodzić od funkcji widoków (FBV) na korzyść klas widoków (CBV) w Django. Oba podejścia mają swoje miejsce i zastosowanie, a wybór między nimi zależy od wielu czynników, takich jak preferencje programistyczne, specyfika projektu, doświadczenie zespołu, czy wymagania funkcjonalne.
Jednym z powodów popularności CBV w Django jest to, że są bardziej zorganizowane, zwłaszcza w przypadku bardziej zaawansowanych scenariuszy, gdzie można korzystać z dziedziczenia klas i mixinów. CBV dostarczają również wbudowanych klas widoków, co może ułatwić obsługę standardowych operacji.
Z drugiej strony, FBV są nadal szeroko stosowane i często preferowane w przypadku prostszych widoków. Są bardziej intuicyjne dla wielu programistów, zwłaszcza dla tych, którzy zaczynają pracę z Django.
Django, jako framework, jest elastyczny i dostosowuje się do różnych potrzeb programistycznych. Wartością tego frameworka jest to, że nie wymusza jednego określonego podejścia. Programiści mają swobodę wyboru między FBV a CBV w zależności od konkretnej sytuacji.
W przyszłości zmiany w Django mogą wprowadzać nowe funkcje lub ułatwienia, ale czy będzie się to wiązać ze zdecydowanym odejściem od jednego z podejść widoków na rzecz drugiego, to kwestia, która zależy od ewolucji frameworka i potrzeb społeczności programistycznej. Warto być świadomym obu form widoków i wybierać je w zależności od kontekstu i wymagań projektu.
W Django, klasowe widoki (CBV) oferują szeroką gamę gotowych klas, które można używać do obsługi różnych przypadków użycia. Warto zaznaczyć, że Django umożliwia także tworzenie niestandardowych klas widoków, które mogą być dostosowane do konkretnych potrzeb projektu. Poniżej znajdziesz kilka popularnych klas widoków CBV dostępnych w Django:
To jest podstawowa klasa widoku. Możesz dziedziczyć z niej, aby stworzyć niestandardowy widok, opierając się na klasie bazowej View i dostosowując go do swoich potrzeb. Na przykład, możesz utworzyć niestandardowy widok, który działa podobnie do ListView lub DetailView. To podejście jest często nazywane „custom view” lub „custom class-based view”.
View
ListView
DetailView
Oto prosty przykład niestandardowego widoku, który działa podobnie do ListView:
from django.shortcuts import render from django.views import View from .models import YourModel class MyListView(View): template_name = 'your_template.html' def get(self, request, *args, **kwargs): objects = YourModel.objects.all() return render(request, self.template_name, {'objects': objects})
W powyższym przykładzie MyListView dziedziczy z View i implementuje metodę get, która pobiera wszystkie obiekty z modelu YourModel i przekazuje je do szablonu w odpowiedzi.
MyListView
get
YourModel
Podobnie, możesz dostosować ten przykład, aby działał jako niestandardowy widok podobny do DetailView:
from django.shortcuts import render, get_object_or_404 from django.views import View from .models import YourModel class MyDetailView(View): template_name = 'your_template.html' def get(self, request, pk, *args, **kwargs): obj = get_object_or_404(YourModel, pk=pk) return render(request, self.template_name, {'object': obj})
W tym przypadku MyDetailView działa podobnie do DetailView, pobierając obiekt modelu na podstawie przekazanego klucza głównego (pk) i przekazując ten obiekt do szablonu w odpowiedzi.
MyDetailView
pk
Takie podejście pozwala na elastyczne tworzenie niestandardowych widoków, które spełniają konkretne wymagania projektu. Warto jednak również zaznaczyć, że Django dostarcza wiele gotowych klas widoków, które można dostosować do potrzeb, co może być bardziej praktyczne w wielu przypadkach.
W klasie widoku View programuje się podobnie jak w przypadku widoków opartych o funkcje (FBV). Ostatecznie obie te formy widoków służą do obsługi żądań HTTP i generowania odpowiedzi. Różnice są głównie w strukturze i podejściu do organizacji kodu.
W klasie widoku View, obsługa różnych metod HTTP (GET, POST, itp.) jest realizowana poprzez definiowanie metod klasy o konkretnych nazwach, takich jak get(), post(), itp. W przypadku FBV, zazwyczaj używa się konstrukcji if request.method == 'GET': lub if request.method == 'POST': do obsługi odpowiednich metod HTTP.
get()
post()
if request.method == 'GET':
if request.method == 'POST':
Przykład klasowego widoku, który obsługuje zarówno GET, jak i POST, może wyglądać tak:
from django.views import View from django.shortcuts import render class MyView(View): template_name = 'my_template.html' def get(self, request, *args, **kwargs): # Obsługa GET return render(request, self.template_name, {'message': 'To jest widok GET!'}) def post(self, request, *args, **kwargs): # Obsługa POST return render(request, self.template_name, {'message': 'To jest widok POST!'})
W powyższym przykładzie, get() i post() to metody klasy MyView, które są wywoływane odpowiednio w przypadku żądania GET i POST. Obydwa te podejścia mają swoje miejsce w Django, a wybór między nimi zależy od preferencji programisty, złożoności projektu oraz wymagań funkcjonalnych.
MyView
Dla porównania poniżej przedstawiam prosty przykład tego samego widoku, ale napisanego jako funkcję(FBV):
from django.shortcuts import render def my_view(request): template_name = 'my_template.html' if request.method == 'GET': # Obsługa GET return render(request, template_name, {'message': 'To jest widok GET!'}) elif request.method == 'POST': # Obsługa POST return render(request, template_name, {'message': 'To jest widok POST!'})
Wykorzystuje szablony do generowania odpowiedzi. Bardzo przydatne, gdy chcesz wyświetlić stronę internetową opartą na szablonach.
Klasa widoku TemplateView w Django jest często używana do renderowania stron, które nie wymagają specjalnej logiki widoku, a jedynie wyświetlenia zawartości szablonu. Oto kilka sytuacji, w których `TemplateView` jest często stosowany:
TemplateView
1. Strony statyczne:
2. Strony informacyjne:
3. Strony formularzy:
4. Strony kategorii lub tagów:
Przykład użycia TemplateView dla strony głównej:
from django.views.generic import TemplateView class HomePageView(TemplateView): template_name = 'home.html'
W powyższym przykładzie, HomePageView jest klasą widoku, która dziedziczy po TemplateView i korzysta z szablonu o nazwie home.html. Ta klasa widoku dostarcza domyślną obsługę GET, która polega na wyrenderowaniu strony z użyciem tego szablonu.
HomePageView
home.html
TemplateView jest używany w sytuacjach, gdzie nie ma potrzeby implementowania specjalnej logiki widoku, a jedynie potrzebne jest wyrenderowanie strony z szablonu.
W widoku opartym na klasie TemplateView w Django możesz przypisać modele, z których generowana jest treść strony. W tym celu możesz nadpisać metodę get_context_data w swojej klasie widoku. Metoda ta jest używana do dostarczenia danych do szablonu.
get_context_data
Oto przykład, w którym klasa MyTemplateView dziedziczy po TemplateView i przypisuje do kontekstu dane pobrane z modelu YourModel:
MyTemplateView
from django.views.generic import TemplateView from .models import YourModel class MyTemplateView(TemplateView): template_name = 'my_template.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['objects'] = YourModel.objects.all() return context
W tym przykładzie get_context_data dodaje do kontekstu listę obiektów pobraną z modelu `YourModel`. Te dane będą dostępne w szablonie (`my_template.html`) i mogą być używane do dynamicznego generowania treści strony.
Również można użyć klasy TemplateView, aby wygenerować dane jednego rekordu z modelu. Jeśli chcesz wyświetlić dane jednego obiektu w szablonie, możesz nadpisać metodę get_context_data w swojej klasie widoku. Poniżej znajdziesz przykład:
from django.views.generic import TemplateView from .models import YourModel class SingleObjectView(TemplateView): template_name = 'single_object_template.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Pobierz pojedynczy obiekt z modelu (np. na podstawie identyfikatora z URL) object_id = self.kwargs.get('id') context['object'] = YourModel.objects.get(id=object_id) return context
W tym przykładzie zakłada się, że adres URL będzie zawierał identyfikator obiektu (np. /single_object/1/). Metoda get_context_data pobiera identyfikator z argumentów kwargs, a następnie używa go do pobrania jednego obiektu z modelu YourModel. Obiekt ten jest następnie dodawany do kontekstu, co pozwala na dostęp do niego w szablonie.
/single_object/1/
W pliku urls.py możesz dodać ścieżkę dla tego widoku, na przykład:
urls.py
from django.urls import path from .views import SingleObjectView urlpatterns = [ path('single_object/<int:id>/', SingleObjectView.as_view(), name='single_object_view'), ]
W tym przypadku, <int:id> oznacza, że oczekujemy liczby całkowitej (int) w adresie URL i przekazujemy ją do widoku jako argument id.
<int:id>
int
id
Widok oparty o klasę RedirectView w Django jest używany do przekierowywania żądań na inne adresy URL. Jest to przydatne w sytuacjach, gdy chcemy, na przykład, przekierować użytkownika z jednego URL do innego, a jednocześnie może to być używane do przekierowania na zewnętrzne strony.
RedirectView
Najczęstsze zastosowania widoku RedirectView to:
1. Przekierowywanie z jednego URL do drugiego:
2. Przekierowywanie na zewnętrzne strony:
3. Przekierowywanie na podstawie warunków:
Przykładowa implementacja RedirectView może wyglądać tak:
from django.views.generic import RedirectView class MyRedirectView(RedirectView): url = '/new-url/' # Adres URL, na który chcemy przekierować użytkownika permanent = False # Określamy, czy przekierowanie ma być trwałe (301) czy tymczasowe (302)
W tym przykładzie, MyRedirectView przekierowuje użytkownika na adres /new-url/. Warto zauważyć, że permanent jest ustawione na False, co oznacza przekierowanie tymczasowe (302). Można to zmienić na True, aby uzyskać przekierowanie trwałe (301).
MyRedirectView
/new-url/
permanent
False
True
Częstym zastosowaniem widoku RedirectView w Django jest obsługa przekierowań z jednego adresu URL do innego, zwłaszcza gdy zmieniamy strukturę naszej witryny, przenosimy zawartość lub zmieniamy adresy URL w naszej aplikacji. Poniżej przedstawiam przykład sytuacji, w której mogłabyś/mógłbyś użyć RedirectView:
Przykład: Zmiana Struktury Adresów URL
Załóżmy, że masz stronę internetową z blogiem, gdzie początkowo adresy URL dla wpisów na blogu były konfigurowane w oparciu o datę, na przykład /blog/rok/miesiac/dzien/nazwa-wpisu/. Jednak zdecydowano się zmienić strukturę URL na bardziej przyjazną dla SEO, na przykład /blog/nazwa-wpisu/.
/blog/rok/miesiac/dzien/nazwa-wpisu/
/blog/nazwa-wpisu/
1. Stara Struktura URL:
/blog/2022/12/01/nazwa-wpisu/
2. Nowa Struktura URL:
W tym przypadku, aby zapewnić płynność w nawigacji i przekierować użytkowników z istniejących linków na nową strukturę, możemy użyć RedirectView:
from django.views.generic import RedirectView class OldBlogPostRedirectView(RedirectView): url = '/blog/nazwa-wpisu/' permanent = True
Ten widok przekierowuje wszystkie żądania, które trafiają na /blog/2022/12/01/nazwa-wpisu/, na /blog/nazwa-wpisu/ i oznacza to jako przekierowanie trwałe (301). Dzięki temu, wyszukiwarki internetowe będą wiedziały, że struktura URL została zmieniona na stałe.
Warto jednak pamiętać, że istnieje wiele strategii dla obsługi przekierowań, a wybór zależy od konkretnych wymagań projektu. Czasami może być bardziej odpowiednie korzystanie z middleware'u do obsługi przekierowań, zwłaszcza gdy mamy do czynienia z wieloma przekierowaniami.
Widok oparty o klasę ListView w Django jest powszechnie używany do wyświetlania listy obiektów z bazy danych na stronie internetowej. Jest to szczególnie przydatne w przypadku, gdy chcesz przedstawić użytkownikowi zestawienie danych, takie jak lista artykułów, postów na blogu, produktów w sklepie internetowym itp. Poniżej przedstawiam kilka typowych zastosowań ListView:
1. Lista artykułów na blogu:
2. Strona kategorii lub tagów:
3. Strona produktów w sklepie internetowym:
4. Lista użytkowników:
5. Strona wyników wyszukiwania:
Przykładowa implementacja ListView może wyglądać tak:
from django.views.generic import ListView from .models import YourModel class MyListView(ListView): model = YourModel template_name = 'my_list_template.html' context_object_name = 'object_list' ordering = ['-date_published'] # Przykładowe sortowanie obiektów paginate_by = 10 # Ilość obiektów na stronie
W tym przykładzie, MyListView korzysta z modelu YourModel i renderuje listę obiektów na podstawie określonego szablonu. ordering określa, w jaki sposób są sortowane obiekty, a paginate_by definiuje, ile obiektów jest wyświetlanych na jednej stronie, co umożliwia łatwe dodawanie paginacji.
ordering
paginate_by
ListView w Django jest przeznaczony głównie do wyświetlania listy obiektów z bazy danych, a nie pojedynczego rekordu. Choć teoretycznie można by użyć ListView do wyświetlenia jednego rekordu, to jednak bardziej odpowiednim widokiem dla tego przypadku jest DetailView, który jest specjalnie zaprojektowany do obsługi pojedynczych obiektów.
Kluczowym celem ListView jest jednak prezentacja zbioru obiektów w formie listy. Istnieją bardziej dedykowane klasy widoków w Django dla niektórych z tych przypadków, takie jak SearchView do wyszukiwania, czy FilterView do filtrowania wyników.
SearchView
FilterView
Widok oparty o klasę DetailView w Django jest najczęściej stosowany do wyświetlania szczegółów pojedynczego obiektu z bazy danych. Jest to bardzo przydatne w sytuacjach, gdzie chcesz prezentować pełne informacje na temat konkretnego rekordu, na przykład:
1. Strony artykułów lub postów:
2. Szczegóły produktów w sklepie internetowym:
3. Profil użytkownika:
4. Strony wydarzeń:
5. Prezentowanie szczegółów obiektów z bazy danych:
Przykładowa implementacja DetailView może wyglądać tak:
from django.views.generic import DetailView from .models import YourModel class MyDetailView(DetailView): model = YourModel template_name = 'my_detail_template.html' context_object_name = 'object'
W tym przykładzie, MyDetailView korzysta z modelu YourModel i renderuje szczegóły jednego obiektu na podstawie określonego szablonu. Identyfikator obiektu jest przekazywany w adresie URL, na przykład /yourmodel/1/.
/yourmodel/1/
Uzupełnić
Widok oparty o klasę CreateView w Django jest najczęściej stosowany do obsługi procesu tworzenia nowych obiektów w bazie danych. Jest to używane, gdy użytkownik chce dodać nowy rekord do systemu, na przykład dodanie nowego artykułu do bloga, nowego produktu do sklepu internetowego, czy nowego wpisu do bazy danych.
CreateView
Najczęstsze zastosowania CreateView to:
1. Formularze dodawania nowych obiektów:
2. Dodawanie nowych wpisów na blogu:
3. Tworzenie nowych użytkowników:
4. Dodawanie nowych produktów w sklepie internetowym:
Przykładowa implementacja CreateView może wyglądać tak:
from django.views.generic.edit import CreateView from .models import YourModel from .forms import YourModelForm # Załóżmy, że masz zdefiniowany formularz class MyCreateView(CreateView): model = YourModel form_class = YourModelForm template_name = 'my_create_template.html' success_url = '/success/' # Przekierowanie po pomyślnym dodaniu obiektu
W tym przykładzie, MyCreateView korzysta z modelu YourModel i formularza YourModelForm do obsługi procesu dodawania nowego obiektu. Po pomyślnym dodaniu obiektu, użytkownik zostanie przekierowany na stronę określoną w success_url.
MyCreateView
YourModelForm
success_url
Widok oparty o klasę UpdateView w Django jest najczęściej stosowany do obsługi procesu aktualizacji istniejących obiektów w bazie danych. Jest to używane, gdy użytkownik chce wprowadzić zmiany w istniejącym rekordzie, na przykład edycja artykułu na blogu, modyfikacja informacji o produkcie w sklepie internetowym czy aktualizacja danych użytkownika.
UpdateView
Najczęstsze zastosowania UpdateView to:
1. Formularze edycji istniejących obiektów:
2. Edycja wpisów na blogu:
3. Modyfikacja informacji o użytkownikach:
4. Aktualizacja informacji o produktach w sklepie internetowym:
Przykładowa implementacja UpdateView może wyglądać tak:
from django.views.generic.edit import UpdateView from .models import YourModel from .forms import YourModelForm # Załóżmy, że masz zdefiniowany formularz class MyUpdateView(UpdateView): model = YourModel form_class = YourModelForm template_name = 'my_update_template.html' success_url = '/success/' # Przekierowanie po pomyślnej aktualizacji obiektu
W tym przykładzie, MyUpdateView korzysta z modelu YourModel i formularza YourModelForm do obsługi procesu aktualizacji istniejącego obiektu. Po pomyślnej aktualizacji obiektu, użytkownik zostanie przekierowany na stronę określoną w success_url.
MyUpdateView
Widok oparty o klasę DeleteView w Django jest najczęściej stosowany do obsługi procesu usuwania istniejących obiektów z bazy danych. Jest to używane, gdy użytkownik chce usunąć konkretny rekord, na przykład usunięcie wpisu na blogu, produktu ze sklepu internetowego czy swojego konta użytkownika.
DeleteView
Najczęstsze zastosowania DeleteView to:
1. Usuwanie wpisów na blogu:
2. Usuwanie produktów w sklepie internetowym:
3. Usuwanie kont użytkowników:
4. Usuwanie innych obiektów:
Przykładowa implementacja DeleteView może wyglądać tak:
from django.views.generic.edit import DeleteView from .models import YourModel from django.urls import reverse_lazy class MyDeleteView(DeleteView): model = YourModel template_name = 'my_delete_template.html' success_url = reverse_lazy('success-url') # Przekierowanie po pomyślnym usunięciu obiektu
W tym przykładzie, MyDeleteView korzysta z modelu YourModel do obsługi procesu usuwania istniejącego obiektu. Po pomyślnym usunięciu obiektu, użytkownik zostanie przekierowany na stronę określoną w success_url. Warto zauważyć, że reverse_lazy jest używane, aby opóźnić odwołanie do odwrotnego mapowania URL do momentu, gdy widok jest gotowy do użycia.
MyDeleteView
reverse_lazy
Widok oparty o klasę ArchiveIndexView w Django jest często stosowany do wyświetlania archiwum zawierającego listę wpisów dla określonego okresu czasu, takiego jak miesiąc czy rok. Jest to część zestawu widoków Django, które ułatwiają obsługę archiwizacji wpisów.
ArchiveIndexView
Najczęstsze zastosowania ArchiveIndexView to:
1. Strona główna archiwum:
2. Nawigacja po okresie czasu:
3. Przeglądanie archiwum:
Przykładowa implementacja ArchiveIndexView może wyglądać tak:
from django.views.generic import ArchiveIndexView from .models import YourPostModel class BlogArchiveView(ArchiveIndexView): model = YourPostModel date_field = 'pub_date' template_name = 'blog_archive.html'
W powyższym przykładzie, BlogArchiveView korzysta z ArchiveIndexView do wygenerowania strony archiwum na podstawie modelu YourPostModel oraz pola daty (pub_date). To umożliwia łatwe wyświetlanie wpisów w zorganizowany sposób, z podziałem na konkretne daty.
BlogArchiveView
YourPostModel
pub_date
W szablonie HTML (blog_archive.html), możemy używać specjalnych zmiennych dostarczanych przez ten widok, takich jak date_list, aby uzyskać dostęp do poszczególnych dat i przypisanych do nich wpisów.
blog_archive.html
date_list
Pole pub_date nie jest tworzone automatycznie w modelu. Musisz je ręcznie dodać do modelu, aby korzystać z widoków opartych na czasie, takich jak ArchiveIndexView. Przykładowy model z polem pub_date może wyglądać tak:
from django.db import models class YourPostModel(models.Model): title = models.CharField(max_length=100) content = models.TextField() pub_date = models.DateTimeField() def __str__(self): return self.title
W tym przykładzie YourPostModel zawiera pole pub_date o typie DateTimeField, które przechowuje informacje o dacie i czasie publikacji wpisu. Jeśli to pole istnieje w twoim modelu, możesz go użyć w widokach opartych na czasie, takich jak ArchiveIndexView. W przypadku ArchiveIndexView, atrybut date_field musi wskazywać na to pole, w tym przypadku na pub_date.
DateTimeField
date_field
Pamiętaj, żeby po wprowadzeniu zmian w modelu przeprowadzić migrację, aby zastosować te zmiany do bazy danych:
python manage.py makemigrations python manage.py migrate
Po tym procesie pole pub_date będzie dostępne w twoim modelu, a ArchiveIndexView będzie mogło korzystać z niego do organizacji wpisów w archiwum.
Widok oparty o klasę YearArchiveView w Django jest używany do wyświetlania listy wpisów z określonego roku. Jest to przydatne, gdy chcemy umożliwić użytkownikom przeglądanie zawartości na podstawie konkretnego roku. Najczęstsze zastosowania YearArchiveView obejmują:
YearArchiveView
1. Archiwum roczne:
2. Nawigacja po latach:
3. Strona kalendarza:
Przykładowa implementacja YearArchiveView może wyglądać tak:
from django.views.generic import YearArchiveView from .models import YourPostModel class BlogYearArchiveView(YearArchiveView): model = YourPostModel date_field = 'pub_date' make_object_list = True allow_future = True template_name = 'blog_year_archive.html'
W powyższym przykładzie, BlogYearArchiveView korzysta z YearArchiveView do wygenerowania strony archiwum na podstawie modelu YourPostModel oraz pola daty (pub_date). make_object_list ustawione na True oznacza, że widok dostarczy listę obiektów z danego roku, co pozwala na ich wyświetlenie na stronie. allow_future ustawione na True pozwala na uwzględnienie w archiwum wpisów z przyszłości.
BlogYearArchiveView
make_object_list
allow_future
W szablonie HTML (blog_year_archive.html), możemy używać specjalnych zmiennych dostarczanych przez ten widok, takich jak date_list, aby uzyskać dostęp do poszczególnych lat i przypisanych do nich wpisów.
blog_year_archive.html
W Django nie istnieje wbudowany widok oparty o klasę o nazwie SearchView. Niemniej jednak, można stworzyć własny widok obsługujący funkcję wyszukiwania. Widok taki może być używany do obsługi procesu wyszukiwania obiektów w bazie danych na podstawie zadanego zapytania.
Najczęstsze zastosowania własnego widoku wyszukiwania to:
1. Wyszukiwanie wpisów na blogu:
2. Wyszukiwanie produktów w sklepie internetowym:
3. Wyszukiwanie użytkowników w systemie:
4. Wyszukiwanie ogólne:
Przykładowa implementacja własnego widoku wyszukiwania może wyglądać tak:
from django.views.generic import ListView from .models import YourModel class SearchView(ListView): model = YourModel template_name = 'search_results.html' def get_queryset(self): query = self.request.GET.get('q') if query: return YourModel.objects.filter(your_search_field__icontains=query) return YourModel.objects.all()
W tym przykładzie, użytkownik wprowadza zapytanie w formularzu na stronie, a widok przetwarza to zapytanie i zwraca pasujące wyniki. Wyszukiwanie jest realizowane na podstawie określonego pola modelu (your_search_field), ale może być dostosowane do własnych potrzeb i struktury bazy danych.
your_search_field
`FormView`:
`RedirectView`:
Te klasy są tylko kilkoma przykładami z dostępnych klas widoków CBV w Django.