Generiska displayvyer¶
De två följande generiska klassbaserade vyerna är utformade för att visa data. I många projekt är de vanligtvis de mest använda vyerna.
DetailView
¶
- class django.views.generic.detail.DetailView¶
När denna vy körs kommer
self.object
att innehålla det objekt som vyn körs på.Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vyer:
Flödesschema för metod
Exempel myapp/views.py:
from django.utils import timezone from django.views.generic.detail import DetailView from articles.models import Article class ArticleDetailView(DetailView): model = Article def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["now"] = timezone.now() return context
Exempel myapp/urls.py:
from django.urls import path from article.views import ArticleDetailView urlpatterns = [ path("<slug:slug>/", ArticleDetailView.as_view(), name="article-detail"), ]
Exempel myapp/article_detail.html:
<h1>{{ object.headline }}</h1> <p>{{ object.content }}</p> <p>Reporter: {{ object.reporter }}</p> <p>Published: {{ object.pub_date|date }}</p> <p>Date: {{ now|date }}</p>
- class django.views.generic.detail.BaseDetailView¶
En basvy för att visa ett enda objekt. Den är inte avsedd att användas direkt, utan snarare som en överordnad klass till
django.views.generic.detail.DetailView
eller andra vyer som representerar detaljer om ett enda objekt.Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vyer:
Metoder
- get(request, *args, **kwargs)¶
Lägger till
object
i kontexten.
ListView
¶
- class django.views.generic.list.ListView¶
En sida som representerar en lista med objekt.
När den här vyn körs kommer
self.object_list
att innehålla listan över objekt (vanligtvis, men inte nödvändigtvis en queryset) som vyn arbetar med.Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vyer:
Flödesschema för metod
Exempel på views.py:
from django.utils import timezone from django.views.generic.list import ListView from articles.models import Article class ArticleListView(ListView): model = Article paginate_by = 100 # if pagination is desired def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["now"] = timezone.now() return context
Exempel myapp/urls.py:
from django.urls import path from article.views import ArticleListView urlpatterns = [ path("", ArticleListView.as_view(), name="article-list"), ]
Exempel myapp/article_list.html:
<h1>Articles</h1> <ul> {% for article in object_list %} <li>{{ article.pub_date|date }} - {{ article.headline }}</li> {% empty %} <li>No articles yet.</li> {% endfor %} </ul>
Om du använder paginering kan du anpassa exempelmallen från pagineringsdokumenten.
- class django.views.generic.list.BaseListView¶
En basvy för att visa en lista med objekt. Den är inte avsedd att användas direkt, utan snarare som en överordnad klass till
django.views.generic.list.ListView
eller andra vyer som representerar listor med objekt.Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vyer:
Metoder
- get(request, *args, **kwargs)¶
Lägger till
object_list
till kontexten. Omallow_empty
är True så visas en tom lista. Omallow_empty
är False så uppstår ett 404-fel.