Datumbaserade generiska vyer, som tillhandahålls i django.views.generic.dates, är vyer för att visa drilldown-sidor för datumbaserade data.
Observera
Några av exemplen på den här sidan utgår från att en Artikel-modell har definierats på följande sätt i myapp/models.py:
from django.db import models
from django.urls import reverse
class Article(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateField()
def get_absolute_url(self):
return reverse("article-detail", kwargs={"pk": self.pk})
ArchiveIndexView¶En indexsida på översta nivån som visar de ”senaste” objekten, efter datum. Objekt med ett datum i framtiden inkluderas inte om du inte ställer in allow_future till True.
Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av django.views.generic.list.MultipleObjectMixin (via django.views.generic.dates.BaseDateListView), kommer mallens sammanhang att vara:
date_list: Ett QuerySet-objekt som innehåller alla år som har objekt tillgängliga enligt queryset, representerade som datetime.datetime-objekt, i fallande ordning.
Noter
Använder ett standardnamn för context_object_name på latest.
Använder standardvärdet template_name_suffix för _archive.
Standard är att tillhandahålla date_list per år, men detta kan ändras till månad eller dag med hjälp av attributet date_list_period. Detta gäller även för alla underklassvyer.
Exempel myapp/urls.py:
from django.urls import path
from django.views.generic.dates import ArchiveIndexView
from myapp.models import Article
urlpatterns = [
path(
"archive/",
ArchiveIndexView.as_view(model=Article, date_field="pub_date"),
name="article_archive",
),
]
Exempel myapp/article_archive.html:
<ul>
{% for article in latest %}
<li>{{ article.pub_date }}: {{ article.title }}</li>
{% endfor %}
</ul>
Detta kommer att mata ut alla artiklar.
ÅrArkivView¶En årlig arkivsida som visar alla tillgängliga månader under ett visst år. Objekt med ett datum i framtiden visas inte om du inte ställer in allow_future till True.
Ancestors (MRO)
En boolean som anger om den fullständiga listan över objekt för det här året ska hämtas och skickas till mallen. Om True, kommer listan med objekt att göras tillgänglig för kontexten. Om False, kommer frågeuppsättningen None att användas som objektlista. Som standard är detta False.
Bestämmer om en objektlista ska returneras som en del av kontexten. Returnerar make_object_list som standard.
Kontext
Förutom det sammanhang som tillhandahålls av django.views.generic.list.MultipleObjectMixin (via django.views.generic.dates.BaseDateListView), kommer mallens sammanhang att vara:
date_list: Ett QuerySet-objekt som innehåller alla månader som har objekt tillgängliga enligt queryset, representerade som datetime.datetime-objekt, i stigande ordning.
year: Ett date-objekt som representerar det angivna året.
next_year: Ett date-objekt som representerar den första dagen i nästa år, enligt allow_empty och allow_future.
previous_year: Ett date-objekt som representerar den första dagen i det föregående året, enligt allow_empty och allow_future.
Noter
Använder standardvärdet för template_name_suffix _archive_year.
Exempel myapp/views.py:
from django.views.generic.dates import YearArchiveView
from myapp.models import Article
class ArticleYearArchiveView(YearArchiveView):
queryset = Article.objects.all()
date_field = "pub_date"
make_object_list = True
allow_future = True
Exempel myapp/urls.py:
from django.urls import path
from myapp.views import ArticleYearArchiveView
urlpatterns = [
path("<int:year>/", ArticleYearArchiveView.as_view(), name="article_year_archive"),
]
Exempel myapp/article_archive_year.html:
<ul>
{% for date in date_list %}
<li>{{ date|date }}</li>
{% endfor %}
</ul>
<div>
<h1>All Articles for {{ year|date:"Y" }}</h1>
{% for obj in object_list %}
<p>
{{ obj.title }} - {{ obj.pub_date|date:"F j, Y" }}
</p>
{% endfor %}
</div>
MonthArchiveView¶En månatlig arkivsida som visar alla objekt under en viss månad. Objekt med ett datum i framtiden visas inte om du inte har ställt in allow_future till True.
Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av MultipleObjectMixin (via BaseDateListView), kommer mallens sammanhang att vara:
datum_lista: Ett QuerySet-objekt som innehåller alla dagar som har objekt tillgängliga i den angivna månaden, enligt queryset, representerade som datetime.datetime-objekt, i stigande ordning.
month: Ett date-objekt som representerar den angivna månaden.
next_month: Ett date-objekt som representerar den första dagen i nästa månad, enligt allow_empty och allow_future.
previous_month: Ett date-objekt som representerar den första dagen i föregående månad, enligt allow_empty och allow_future.
Noter
Använder standardvärdet för template_name_suffix _archive_month.
Exempel myapp/views.py:
from django.views.generic.dates import MonthArchiveView
from myapp.models import Article
class ArticleMonthArchiveView(MonthArchiveView):
queryset = Article.objects.all()
date_field = "pub_date"
allow_future = True
Exempel myapp/urls.py:
from django.urls import path
from myapp.views import ArticleMonthArchiveView
urlpatterns = [
# Example: /2012/08/
path(
"<int:year>/<int:month>/",
ArticleMonthArchiveView.as_view(month_format="%m"),
name="archive_month_numeric",
),
# Example: /2012/aug/
path(
"<int:year>/<str:month>/",
ArticleMonthArchiveView.as_view(),
name="archive_month",
),
]
Exempel myapp/article_archive_month.html:
<ul>
{% for article in object_list %}
<li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li>
{% endfor %}
</ul>
<p>
{% if previous_month %}
Previous Month: {{ previous_month|date:"F Y" }}
{% endif %}
{% if next_month %}
Next Month: {{ next_month|date:"F Y" }}
{% endif %}
</p>
WeekArchiveView¶En veckovis arkivsida som visar alla objekt under en viss vecka. Objekt med ett datum i framtiden visas inte om du inte har ställt in allow_future till True.
Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av MultipleObjectMixin (via BaseDateListView), kommer mallens sammanhang att vara:
week: Ett date-objekt som representerar den första dagen i den angivna veckan.
next_week: Ett date-objekt som representerar den första dagen i nästa vecka, enligt allow_empty och allow_future.
previous_week: Ett date-objekt som representerar den första dagen i föregående vecka, enligt allow_empty och allow_future.
Noter
Använder standardvärdet för template_name_suffix _archive_week.
Attributet week_format är en strptime() formatsträng som används för att tolka veckonumret. Följande värden stöds:
'%U': Baserat på USA:s veckosystem där veckan börjar på söndag. Detta är standardvärdet.
'%W': Liknar '%U', men antar att veckan börjar på måndag. Detta är inte samma sak som ISO 8601-veckonumret.
'%V': ISO 8601 veckonummer där veckan börjar på måndag.
Exempel myapp/views.py:
from django.views.generic.dates import WeekArchiveView
from myapp.models import Article
class ArticleWeekArchiveView(WeekArchiveView):
queryset = Article.objects.all()
date_field = "pub_date"
week_format = "%W"
allow_future = True
Exempel myapp/urls.py:
from django.urls import path
from myapp.views import ArticleWeekArchiveView
urlpatterns = [
# Example: /2012/week/23/
path(
"<int:year>/week/<int:week>/",
ArticleWeekArchiveView.as_view(),
name="archive_week",
),
]
Exempel myapp/article_archive_week.html:
<h1>Week {{ week|date:'W' }}</h1>
<ul>
{% for article in object_list %}
<li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li>
{% endfor %}
</ul>
<p>
{% if previous_week %}
Previous Week: {{ previous_week|date:"W" }} of year {{ previous_week|date:"Y" }}
{% endif %}
{% if previous_week and next_week %}--{% endif %}
{% if next_week %}
Next week: {{ next_week|date:"W" }} of year {{ next_week|date:"Y" }}
{% endif %}
</p>
I det här exemplet skriver du ut veckonumret. Tänk på att veckonummer som beräknas av mallfiltret date med formattecknet 'W' inte alltid är samma som de som beräknas av strftime() och strptime() med formatsträngen '%W'. För år 2015, till exempel, är veckonummer som matas ut av date högre med ett jämfört med de som matas ut av strftime(). Det finns ingen motsvarighet till formatsträngen '%U' strftime() i date. Därför bör du undvika att använda date för att generera URL:er för WeekArchiveView.
DayArchiveView¶En dagarkivsida som visar alla objekt under en viss dag. Dagar i framtiden ger ett 404-fel, oavsett om det finns några objekt för framtida dagar, såvida du inte har ställt in allow_future till True.
Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av MultipleObjectMixin (via BaseDateListView), kommer mallens sammanhang att vara:
day: Ett date-objekt som representerar den angivna dagen.
next_day: Ett date-objekt som representerar nästa dag, enligt allow_empty och allow_future.
previous_day: Ett date-objekt som representerar föregående dag, enligt allow_empty och allow_future.
next_month: Ett date-objekt som representerar den första dagen i nästa månad, enligt allow_empty och allow_future.
previous_month: Ett date-objekt som representerar den första dagen i föregående månad, enligt allow_empty och allow_future.
Noter
Använder standardvärdet för template_name_suffix _archive_day.
Exempel myapp/views.py:
from django.views.generic.dates import DayArchiveView
from myapp.models import Article
class ArticleDayArchiveView(DayArchiveView):
queryset = Article.objects.all()
date_field = "pub_date"
allow_future = True
Exempel myapp/urls.py:
from django.urls import path
from myapp.views import ArticleDayArchiveView
urlpatterns = [
# Example: /2012/nov/10/
path(
"<int:year>/<str:month>/<int:day>/",
ArticleDayArchiveView.as_view(),
name="archive_day",
),
]
Exempel myapp/article_archive_day.html:
<h1>{{ day }}</h1>
<ul>
{% for article in object_list %}
<li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li>
{% endfor %}
</ul>
<p>
{% if previous_day %}
Previous Day: {{ previous_day }}
{% endif %}
{% if previous_day and next_day %}--{% endif %}
{% if next_day %}
Next Day: {{ next_day }}
{% endif %}
</p>
TodayArchiveView¶En dagarkivsida som visar alla objekt för today. Detta är exakt samma sak som django.views.generic.dates.DayArchiveView, förutom att dagens datum används istället för argumenten år/månad/dag.
Ancestors (MRO)
Noter
Använder standardvärdet template_name_suffix _archive_today.
Exempel myapp/views.py:
from django.views.generic.dates import TodayArchiveView
from myapp.models import Article
class ArticleTodayArchiveView(TodayArchiveView):
queryset = Article.objects.all()
date_field = "pub_date"
allow_future = True
Exempel myapp/urls.py:
from django.urls import path
from myapp.views import ArticleTodayArchiveView
urlpatterns = [
path("today/", ArticleTodayArchiveView.as_view(), name="archive_today"),
]
Var finns exempelmallen för TodayArchiveView?
Denna vy använder som standard samma mall som DayArchiveView, som finns i det föregående exemplet. Om du behöver en annan mall, ställ in attributet template_name till namnet på den nya mallen.
DateDetailView¶En sida som representerar ett enskilt objekt. Om objektet har ett datumvärde i framtiden kommer vyn att ge ett 404-fel som standard, såvida du inte ställer in allow_future till True.
Ancestors (MRO)
Kontext
Innehåller det enskilda objekt som är associerat med den modell som anges i DateDetailView.
Noter
Använder standardvärdet template_name_suffix för _detail.
Exempel myapp/urls.py:
from django.urls import path
from django.views.generic.dates import DateDetailView
urlpatterns = [
path(
"<int:year>/<str:month>/<int:day>/<int:pk>/",
DateDetailView.as_view(model=Article, date_field="pub_date"),
name="archive_date_detail",
),
]
Exempel myapp/article_detail.html:
<h1>{{ object.title }}</h1>
Observera
Alla generiska vyer som anges ovan har matchande Base-vyer som bara skiljer sig åt genom att de inte innehåller MultipleObjectTemplateResponseMixin (för arkivvyerna) eller SingleObjectTemplateResponseMixin (för DateDetailView):
aug. 11, 2025