Följande tre klasser tillhandahåller mycket av den funktionalitet som behövs för att skapa Django-vyer. Du kan tänka på dem som föräldrar vyer, som kan användas av sig själva eller ärvas från. De kanske inte tillhandahåller alla funktioner som krävs för projekt, i vilket fall det finns Mixins och generiska klassbaserade vyer.
Många av Djangos inbyggda klassbaserade vyer ärver från andra klassbaserade vyer eller olika mixins. Eftersom denna arvskedja är mycket viktig dokumenteras förfädersklasserna under avsnittets titel Förfäder (MRO). MRO är en akronym för Method Resolution Order.
View¶Basklassen för vyn. Alla andra klassbaserade vyer ärver från denna basklass. Det är inte strikt en generisk vy och kan därför också importeras från django.views.
Flödesschema för metod
Exempel på views.py:
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request, *args, **kwargs):
return HttpResponse("Hello, World!")
Exempel urls.py:
from django.urls import path
from myapp.views import MyView
urlpatterns = [
path("mine/", MyView.as_view(), name="my-view"),
]
Attribut
Listan över HTTP-metodnamn som den här vyn accepterar.
Standard:
["get", "post", "put", "patch", "delete", "head", "options", "trace"]
Metoder
Returnerar en anropsbar vy som tar emot en begäran och returnerar ett svar:
response = MyView.as_view()(request)
Den returnerade vyn har attributen view_class och view_initkwargs.
När vyn anropas under request/response-cykeln, tilldelar metoden setup() HttpRequest till vyns attribut request, och alla positionella och/eller nyckelordsargument :ref:fångade från URL-mönstret <how-django-processes-a-request> till attributen args respektive kwargs. Sedan anropas dispatch().
Om en subklass av View definierar asynkrona (async def) metodhanterare, kommer as_view() att markera den returnerade anropbara funktionen som en coroutine-funktion. Ett ImproperlyConfigured undantag kommer att uppstå om både asynkrona (async def) och synkrona (def) hanterare är definierade på en enda view-klass.
Utför initialisering av nyckelvyn före dispatch().
Tilldelar HttpRequest till vyns request-attribut, och alla positionella och/eller nyckelordsargument fångade från URL-mönstret till args- respektive kwargs-attributen.
Om du åsidosätter den här metoden måste du anropa super().
View-delen av vyn - den metod som tar emot ett request-argument plus argument och returnerar ett HTTP-svar.
Standardimplementeringen inspekterar HTTP-metoden och försöker delegera till en metod som matchar HTTP-metoden; en GET kommer att delegeras till get(), en POST till post(), och så vidare.
Som standard kommer en HEAD-förfrågan att delegeras till get(). Om du behöver hantera HEAD-förfrågningar på ett annat sätt än GET, kan du åsidosätta head()-metoden. Se Stöd för andra HTTP-metoder för ett exempel.
Om vyn anropades med en HTTP-metod som den inte stöder, anropas den här metoden i stället.
Standardimplementeringen returnerar HttpResponseNotAllowed med en lista över tillåtna metoder i klartext.
Hanterar svar på förfrågningar om HTTP-verbet OPTIONS. Returnerar ett svar med rubriken Allow som innehåller en lista över vyns tillåtna HTTP-metodnamn.
Om de andra HTTP-metodhanterarna i klassen är asynkrona (async def) kommer svaret att paketeras i en coroutine-funktion för användning med await.
TemplateView¶Renderar en given mall med kontexten som innehåller parametrar som fångas upp i URL:en.
Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vyer:
Flödesschema för metod
Exempel på views.py:
from django.views.generic.base import TemplateView
from articles.models import Article
class HomePageView(TemplateView):
template_name = "home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["latest_articles"] = Article.objects.all()[:5]
return context
Exempel urls.py:
from django.urls import path
from myapp.views import HomePageView
urlpatterns = [
path("", HomePageView.as_view(), name="home"),
]
Kontext
Fylls på (genom ContextMixin) med nyckelordsargumenten som fångats från URL-mönstret som serverade vyn.
Du kan också lägga till kontext med hjälp av extra_context nyckelordsargument för as_view().
RedirectView¶Omdirigeringar till en viss URL.
Den angivna URL:en kan innehålla strängformatering i ordboksstil, som interpoleras mot de parametrar som fångas upp i URL:en. Eftersom nyckelordsinterpolering alltid görs (även om inga argument skickas in), måste alla "%"-tecken i webbadressen skrivas som "%%" så att Python konverterar dem till ett enda procenttecken vid utmatning.
Om den angivna URL:en är None kommer Django att returnera en HttpResponseGone (410).
Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vy:
Flödesschema för metod
Exempel på views.py:
from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView
from articles.models import Article
class ArticleCounterRedirectView(RedirectView):
permanent = False
query_string = True
pattern_name = "article-detail"
def get_redirect_url(self, *args, **kwargs):
article = get_object_or_404(Article, pk=kwargs["pk"])
article.update_counter()
return super().get_redirect_url(*args, **kwargs)
Exempel urls.py:
from django.urls import path
from django.views.generic.base import RedirectView
from article.views import ArticleCounterRedirectView, ArticleDetailView
urlpatterns = [
path(
"counter/<int:pk>/",
ArticleCounterRedirectView.as_view(),
name="article-counter",
),
path("details/<int:pk>/", ArticleDetailView.as_view(), name="article-detail"),
path(
"go-to-django/",
RedirectView.as_view(url="https://www.djangoproject.com/"),
name="go-to-django",
),
]
Attribut
URL:en som ska omdirigeras till, som en sträng. Eller None för att skapa ett 410 (Gone) HTTP-fel.
Namnet på det URL-mönster som ska omdirigeras till. Omdirigeringen görs med samma args och kwargs som skickas in för den här vyn.
Om omdirigeringen ska vara permanent. Den enda skillnaden här är den HTTP-statuskod som returneras. Om True används statuskod 301 för omdirigeringen. Om False används statuskod 302 för omdirigeringen. Som standard är permanent False.
Om GET-frågesträngen ska skickas vidare till den nya platsen. Om True, läggs frågesträngen till i URL:en. Om False, kasseras frågesträngen. Som standard är query_string False.
Metoder
Skapar mål-URL:en för omdirigering.
Argumenten args och kwargs är positions- respektive nyckelordsargument :ref:` som hämtats från URL-mönstret <how-django-processes-a-request>`.
Standardimplementeringen använder url som en startsträng och expanderar % namngivna parametrar i den strängen med hjälp av de namngivna grupper som fångas upp i URL:en.
Om url inte anges försöker get_redirect_url() att vända pattern_name med hjälp av det som fångades upp i URL:en (både namngivna och icke namngivna grupper används).
Om det begärs av query_string, kommer den också att lägga till frågesträngen till den genererade URL:en. Underklasser kan implementera vilket beteende de vill, så länge som metoden returnerar en URL-sträng som är redo för omdirigering.
aug. 11, 2025