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
¶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
(via django.views.generic.dates.BaseDateListView
), le contexte de gabarit sera :
date_list
: un objet QuerySet
contenant toutes les années possédant des objets disponibles en fonction de queryset
, représentés sous forme d’objets datetime.datetime
dans l’ordre chronologique inverse.Notes
context_object_name
est latest
.template_name_suffix
est _archive
.date_list
par année, mais il est possible aussi d’utiliser des mois ou des jours en modifiant l’attribut date_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
¶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ête None
sera utilisé en tant que liste d’objets. Par défaut, cette valeur vaut False
.
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
(via django.views.generic.dates.BaseDateListView
), le contexte de gabarit sera :
date_list
: un objet QuerySet
contenant tous les mois possédant des objets disponibles en fonction de queryset
, représentés sous forme d’objets datetime.datetime
dans l’ordre chronologique.year
: un objet date
représentant l’année indiquée.next_year
: un objet date
représentant le premier jour de l’année suivante, en fonction de allow_empty
et allow_future
.previous_year
: un objet date
représentant le premier jour de l’année précédente, en fonction de allow_empty
et allow_future
.Notes
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
¶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
(via BaseDateListView
), le contexte du gabarit sera :
date_list
: un objet QuerySet
contenant tous les jours possédant des objets disponibles dans le mois indiqué, en fonction de queryset
, représentés sous forme d’objets datetime.datetime
dans l’ordre chronologique.month
: un objet date
représentant le mois donné.next_month
: un objet date
représentant le premier jour du mois suivant, en fonction de allow_empty
et allow_future
.previous_month
: un objet date
représentant le premier jour du mois précédent, en fonction de allow_empty
et allow_future
.Notes
template_name_suffix
est _archive_month
.Exemple 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
Exemple 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"),
]
Exemple 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
¶WeekArchiveView
¶Une page d’archives hebdomadaires affichant tous les objets disponibles d’une semaine 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.BaseWeekArchiveView
django.views.generic.dates.YearMixin
django.views.generic.dates.WeekMixin
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
(via BaseDateListView
), le contexte du gabarit sera :
week
: un objet date
représentant le premier jour de la semaine indiquée.next_week
: un objet date
représentant le premier jour de la semaine suivante, en fonction de allow_empty
et allow_future
.previous_week
: un objet date
représentant le premier jour de la semaine précédente, en fonction de allow_empty
et allow_future
.Notes
La valeur par défaut de template_name_suffix
est _archive_week
.
L’attribut week_format
est une chaîne de format strptime()
utilisée pour récupérer le numéro de semaine. Les valeurs suivantes sont prises en charge :
'%U'
: basé sur le système de semaines des États-Unis où la semaine commence un dimanche. Il s’agit de la valeur par défaut.
'%W'
: semblable à '%U'
, excepté la semaine qui commence par le lundi. Ce n’est pas la même chose que le numéro de semaine ISO 8601.
'%V'
: le numéro de semaine ISO 8601 où la semaine commence un lundi.
La prise en charge du format de semaine '%V'
a été ajoutée.
Exemple 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
Exemple 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"),
]
Exemple 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>
Dans cet exemple, le numéro de semaine est affiché. N’oubliez pas que les numéros de semaine produits par le filtre de gabarit date
avec le caractère de mise en forme 'W'
ne sont pas toujours identiques aux numéros de semaine produits par la chaîne de mise en forme '%W'
de strftime()
et strptime()
. Par exemple, pour l’année 2015, les numéros de semaine produits par date
sont plus élevés de un par rapport à ceux de strftime()
. Il n’existe pas d’équivalent à la chaîne de format '%U'
de strftime()
pour date
. Il faudrait donc éviter d’utiliser date
pour générer des URL pour la vue WeekArchiveView
.
DayArchiveView
¶DayArchiveView
¶Une page d’archives journalières affichant tous les objets disponibles d’un jour donné. Les jours ayant une date dans le futur génèrent une erreur 404, sans considérer si des objets existent pour les jours futurs, 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.BaseDayArchiveView
django.views.generic.dates.YearMixin
django.views.generic.dates.MonthMixin
django.views.generic.dates.DayMixin
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
(via BaseDateListView
), le contexte du gabarit sera :
day
: un objet date
représentant le jour indiqué.next_day
: un objet date
représentant le jour suivant, en fonction de allow_empty
et allow_future
.previous_day
: un objet date
représentant le jour précédent, en fonction de allow_empty
et allow_future
.next_month
: un objet date
représentant le premier jour du mois suivant, en fonction de allow_empty
et allow_future
.previous_month
: un objet date
représentant le premier jour du mois précédent, en fonction de allow_empty
et allow_future
.Notes
template_name_suffix
est _archive_day
.Exemple 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
Exemple 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"),
]
Exemple 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
¶TodayArchiveView
¶Une page d’archives journalières affichant tous les objets disponibles pour aujourd’hui. C’est exactement la même vue que django.views.generic.dates.DayArchiveView
, excepté que c’est la date du jour qui est prise en compte à la place des paramètres year
/month
/day
.
Ancêtres (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.dates.BaseTodayArchiveView
django.views.generic.dates.BaseDayArchiveView
django.views.generic.dates.YearMixin
django.views.generic.dates.MonthMixin
django.views.generic.dates.DayMixin
django.views.generic.dates.BaseDateListView
django.views.generic.list.MultipleObjectMixin
django.views.generic.dates.DateMixin
django.views.generic.base.View
Notes
template_name_suffix
est _archive_today
.Exemple 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
Exemple myapp/urls.py :
from django.urls import path
from myapp.views import ArticleTodayArchiveView
urlpatterns = [
path('today/',
ArticleTodayArchiveView.as_view(),
name="archive_today"),
]
Où se trouve le gabarit d’exemple pour TodayArchiveView
?
Cette vue utilise par défaut le même gabarit que DayArchiveView
, qui figure dans l’exemple précédent. Si vous avez besoin d’un gabarit différent, définissez l’attribut template_name
avec le nom du nouveau gabarit.
DateDetailView
¶DateDetailView
¶Une page représentant un objet individuel. Si l’objet contient une valeur de date dans le futur, la vue génère par défaut une erreur 404, sauf si allow_future
est défini à True
.
Ancêtres (MRO)
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.dates.BaseDateDetailView
django.views.generic.dates.YearMixin
django.views.generic.dates.MonthMixin
django.views.generic.dates.DayMixin
django.views.generic.dates.DateMixin
django.views.generic.detail.BaseDetailView
django.views.generic.detail.SingleObjectMixin
django.views.generic.base.View
Contexte
model
défini dans la vue DateDetailView
.Notes
template_name_suffix
est _detail
.Exemple 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"),
]
Exemple myapp/article_detail.html :
<h1>{{ object.title }}</h1>
Note
Toutes les vues génériques mentionnées ci-dessus ont des vues Base
correspondantes dont la seule différence est de ne pas inclure MultipleObjectTemplateResponseMixin
(pour les vues d’archives) ni SingleObjectTemplateResponseMixin
(pour DateDetailView
) :
BaseArchiveIndexView
¶BaseYearArchiveView
¶BaseMonthArchiveView
¶BaseWeekArchiveView
¶BaseDayArchiveView
¶BaseTodayArchiveView
¶BaseDateDetailView
¶déc. 07, 2021