Vues génériques basées sur les dates¶
Les vues génériques basées sur les dates, définies dans django.views.generic.dates
, sont des vues destinées à afficher des pages énumérant en détails des données en fonction de leur date.
Note
Quelques exemples de cette page se basent sur le modèle Article
défini comme suit dans 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
¶ Une page de sommaire de premier niveau affichant les « derniers » objets par date. Les objets ayant une date dans le futur ne sont pas inclus, sauf si
allow_future
est défini àTrue
.Ancêtres (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.dates.BaseArchiveIndexView
django.views.generic.dates.BaseDateListView
django.views.generic.list.MultipleObjectMixin
django.views.generic.dates.DateMixin
django.views.generic.base.View
Contexte
En plus du contexte fourni par
django.views.generic.list.MultipleObjectMixin
(viadjango.views.generic.dates.BaseDateListView
), le contexte de gabarit sera :date_list
: un objetQuerySet
contenant toutes les années possédant des objets disponibles en fonction dequeryset
, représentés sous forme d’objetsdatetime.datetime
dans l’ordre chronologique inverse.
Notes
- La valeur par défaut de
context_object_name
estlatest
. - La valeur par défaut de
template_name_suffix
est_archive
. - Le comportement par défaut est de fournir
date_list
par année, mais il est possible aussi d’utiliser des mois ou des jours en modifiant l’attributdate_list_period
. Cela s’applique également à toutes les sous-classes de cette vue.
Exemple 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", ), ]
Exemple de myapp/article_archive.html:
<ul> {% for article in latest %} <li>{{ article.pub_date }}: {{ article.title }}</li> {% endfor %} </ul>
Ceci affiche tous les articles.
YearArchiveView
¶
-
class
YearArchiveView
¶ Une page d’archives annuelles affichant tous les mois disponibles d’une année donnée. Les objets ayant une date dans le futur ne sont pas inclus, sauf si
allow_future
est défini àTrue
.Ancêtres (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.dates.BaseYearArchiveView
django.views.generic.dates.YearMixin
django.views.generic.dates.BaseDateListView
django.views.generic.list.MultipleObjectMixin
django.views.generic.dates.DateMixin
django.views.generic.base.View
-
make_object_list
¶ Un booléen indiquant s’il faut récupérer la liste complète des objets de l’année courante et les passer au gabarit. Si la valeur est à
True
, la liste sera disponible dans le contexte. Sinon, si la valeur est àFalse
, le jeu de requêteNone
sera utilisé en tant que liste d’objets. Par défaut, cette valeur vautFalse
.
-
get_make_object_list
()¶ Détermine si une liste d’objets est renvoyée comme une portion du contexte. Renvoie
make_object_list
par défaut.
Contexte
En plus du contexte fourni par
django.views.generic.list.MultipleObjectMixin
(viadjango.views.generic.dates.BaseDateListView
), le contexte de gabarit sera :date_list
: un objetQuerySet
contenant tous les mois possédant des objets disponibles en fonction dequeryset
, représentés sous forme d’objetsdatetime.datetime
dans l’ordre chronologique.year
: un objetdate
représentant l’année indiquée.next_year
: un objetdate
représentant le premier jour de l’année suivante, en fonction deallow_empty
etallow_future
.previous_year
: un objetdate
représentant le premier jour de l’année précédente, en fonction deallow_empty
etallow_future
.
Notes
- La valeur par défaut de
template_name_suffix
est_archive_year
.
Exemple 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
Exemple myapp/urls.py :
from django.urls import path from myapp.views import ArticleYearArchiveView urlpatterns = [ path("<int:year>/", ArticleYearArchiveView.as_view(), name="article_year_archive"), ]
Exemple 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
¶ Une page d’archives mensuelles affichant tous les objets disponibles d’un mois donné. Les objets ayant une date dans le futur ne sont pas inclus, sauf si
allow_future
est défini àTrue
.Ancêtres (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.dates.BaseMonthArchiveView
django.views.generic.dates.YearMixin
django.views.generic.dates.MonthMixin
django.views.generic.dates.BaseDateListView
django.views.generic.list.MultipleObjectMixin
django.views.generic.dates.DateMixin
django.views.generic.base.View
Contexte
En plus du contexte fourni par la classe
MultipleObjectMixin
(viaBaseDateListView
), le contexte du gabarit sera :date_list
: un objetQuerySet
contenant tous les jours possédant des objets disponibles dans le mois indiqué, en fonction dequeryset
, représentés sous forme d’objetsdatetime.datetime
dans l’ordre chronologique.month
: un objetdate
représentant le mois donné.next_month
: un objetdate
représentant le premier jour du mois suivant, en fonction de