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_futuretillTrue.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_namepålatest.Använder standardvärdet
template_name_suffixför_archive.Standard är att tillhandahålla
date_listper å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_futuretillTrue.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ättningenNoneatt 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_listsom 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_emptyochallow_future.previous_year: Ettdate-objekt som representerar den första dagen i det föregående året, enligtallow_emptyochallow_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_futuretillTrue.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_emptyochallow_future.previous_month: Ettdate-objekt som representerar den första dagen i föregående månad, enligtallow_emptyochallow_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_futuretillTrue.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_emptyochallow_future.previous_week: Ettdate-objekt som representerar den första dagen i föregående vecka, enligtallow_emptyochallow_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
datemed 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 avdatehö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ändadatefö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_futuretillTrue.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_emptyochallow_future.previous_day: Ettdate-objekt som representerar föregående dag, enligtallow_emptyochallow_future.next_month: Ettdate-objekt som representerar den första dagen i nästa månad, enligtallow_emptyochallow_future.previous_month: Ettdate-objekt som representerar den första dagen i föregående månad, enligtallow_emptyochallow_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_nametill 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_futuretillTrue.Ancestors (MRO)
Kontext
Innehåller det enskilda objekt som är associerat med den
modellsom anges iDateDetailView.
Noter
Använder standardvärdet
template_name_suffixfö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):