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.objectatt 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.DetailVieweller 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
objecti 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_listatt 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.ListVieweller 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_listtill kontexten. Omallow_emptyär True så visas en tom lista. Omallow_emptyär False så uppstår ett 404-fel.