Generisk datumvisning¶
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
¶
- class ArchiveIndexView[source]¶
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
tillTrue
.Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av
django.views.generic.list.MultipleObjectMixin
(viadjango.views.generic.dates.BaseDateListView
), kommer mallens sammanhang att vara:date_list
: EttQuerySet
-objekt som innehåller alla år som har objekt tillgängliga enligtqueryset
, representerade somdatetime.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 attributetdate_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
¶
- class YearArchiveView[source]¶
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
tillTrue
.Ancestors (MRO)
- make_object_list¶
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. OmFalse
, kommer frågeuppsättningenNone
att användas som objektlista. Som standard är dettaFalse
.
- get_make_object_list()¶
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
(viadjango.views.generic.dates.BaseDateListView
), kommer mallens sammanhang att vara:date_list
: EttQuerySet
-objekt som innehåller alla månader som har objekt tillgängliga enligtqueryset
, representerade somdatetime.datetime
-objekt, i stigande ordning.year
: Ettdate
-objekt som representerar det angivna året.next_year
: Ettdate
-objekt som representerar den första dagen i nästa år, enligtallow_empty
ochallow_future
.previous_year
: Ettdate
-objekt som representerar den första dagen i det föregående året, enligtallow_empty
ochallow_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
¶
- class MonthArchiveView[source]¶
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
tillTrue
.Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av
MultipleObjectMixin
(viaBaseDateListView
), kommer mallens sammanhang att vara:datum_lista
: EttQuerySet
-objekt som innehåller alla dagar som har objekt tillgängliga i den angivna månaden, enligtqueryset
, representerade somdatetime.datetime
-objekt, i stigande ordning.month
: Ettdate
-objekt som representerar den angivna månaden.next_month
: Ettdate
-objekt som representerar den första dagen i nästa månad, enligtallow_empty
ochallow_future
.previous_month
: Ettdate
-objekt som representerar den första dagen i föregående månad, enligtallow_empty
ochallow_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
¶
- class WeekArchiveView[source]¶
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
tillTrue
.Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av
MultipleObjectMixin
(viaBaseDateListView
), kommer mallens sammanhang att vara:week
: Ettdate
-objekt som representerar den första dagen i den angivna veckan.next_week
: Ettdate
-objekt som representerar den första dagen i nästa vecka, enligtallow_empty
ochallow_future
.previous_week
: Ettdate
-objekt som representerar den första dagen i föregående vecka, enligtallow_empty
ochallow_future
.
Noter
Använder standardvärdet för
template_name_suffix
_archive_week
.Attributet
week_format
är enstrptime()
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 avstrftime()
ochstrptime()
med formatsträngen'%W'
. För år 2015, till exempel, är veckonummer som matas ut avdate
högre med ett jämfört med de som matas ut avstrftime()
. Det finns ingen motsvarighet till formatsträngen'%U'
strftime()
idate
. Därför bör du undvika att användadate
för att generera URL:er förWeekArchiveView
.
DayArchiveView
¶
- class DayArchiveView[source]¶
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
tillTrue
.Ancestors (MRO)
Kontext
Förutom det sammanhang som tillhandahålls av
MultipleObjectMixin
(viaBaseDateListView
), kommer mallens sammanhang att vara:day
: Ettdate
-objekt som representerar den angivna dagen.next_day
: Ettdate
-objekt som representerar nästa dag, enligtallow_empty
ochallow_future
.previous_day
: Ettdate
-objekt som representerar föregående dag, enligtallow_empty
ochallow_future
.next_month
: Ettdate
-objekt som representerar den första dagen i nästa månad, enligtallow_empty
ochallow_future
.previous_month
: Ettdate
-objekt som representerar den första dagen i föregående månad, enligtallow_empty
ochallow_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
¶
- class TodayArchiveView[source]¶
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 attributettemplate_name
till namnet på den nya mallen.
DateDetailView
¶
- class DateDetailView[source]¶
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
tillTrue
.Ancestors (MRO)
Kontext
Innehåller det enskilda objekt som är associerat med den
modell
som anges iDateDetailView
.
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
):