Las vistas basadas en fechas, proporcionadas en django.views.generic.dates, son vistas para mostrar páginas de «drilldown» para datos basados en fechas.
Nota
Algunos ejemplos de esta página suponen que un modelo Article ha sido definido como sigue en 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})
ArchivoIndexView¶Una página de índice a nivel superior que muestra los «últimos» objetos, por fecha. Los objetos con una fecha en el futuro no se incluyen a menos que establezcas allow_future en True.
Ancestros (MRO)
Contexto
Además del contexto proporcionado por django.views.generic.list.MultipleObjectMixin (a través de django.views.generic.dates.BaseDateListView), el contexto del template será:
date_list: Un objeto QuerySet que contiene todos los años que tienen objetos disponibles según queryset, representados como objetos datetime.datetime, en orden descendente.
Notas
Utiliza un nombre de objeto de contexto predeterminado de latest.
Utiliza un sufijo de nombre del template predeterminado de _archive.
Por defecto, proporciona date_list por año, pero esto se puede alterar a mes o día utilizando la atributo date_list_period. Esto también se aplica a todas las vistas heredadas.
Ejemplo 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",
),
]
Ejemplo myapp/article_archive.html:
<ul>
{% for article in latest %}
<li>{{ article.pub_date }}: {{ article.title }}</li>
{% endfor %}
</ul>
Esta será la salida de todos los artículos.
Una página de archivo anual que muestra todos los meses disponibles en un año determinado. Los objetos con una fecha en el futuro no se muestran a menos que establezcas allow_future en True.
Ancestros (MRO)
Un booleano que especifica si se debe recuperar la lista completa de objetos para este año y pasar esos a la plantilla. Si True, la lista de objetos estará disponible en el contexto. Si False, se utilizará el conjunto de consultas vacío como lista de objetos. Por defecto, esto es False.
Determina si una lista de objetos se devolverá como parte del contexto. Devuelve make_object_list por defecto.
Contexto
Además del contexto proporcionado por django.views.generic.list.MultipleObjectMixin (a través de django.views.generic.dates.BaseDateListView), el contexto del template será:
date_list: Un objeto QuerySet que contiene todos los meses que tienen objetos disponibles según queryset, representados como objetos datetime.datetime, en orden ascendente.
year: Un objeto date que representa el año dado.
next_year: Un objeto date que representa el primer día del próximo año, según allow_empty y allow_future.
previous_year: Un objeto date que representa el primer día del año anterior, según allow_empty y allow_future.
Notas
Usa un sufijo de nombre de plantilla por defecto _archive_year.
Ejemplo 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
Ejemplo myapp/urls.py:
from django.urls import path
from myapp.views import ArticleYearArchiveView
urlpatterns = [
path("<int:year>/", ArticleYearArchiveView.as_view(), name="article_year_archive"),
]
Ejemplo 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>
Una página de archivo mensual que muestra todos los objetos en un mes determinado. Los objetos con una fecha en el futuro no se muestran a menos que establezcas allow_future en True.
Ancestros (MRO)
Contexto
Además del contexto proporcionado por MultipleObjectMixin (a través de BaseDateListView), el contexto del template será:
date_list: Un objeto QuerySet que contiene todos los días que tienen objetos disponibles en el mes dado, según queryset, representados como objetos datetime.datetime, en orden ascendente.
month: Un objeto date que representa el mes dado.
next_month: Un objeto date que representa el primer día del siguiente mes, según allow_empty y allow_future.
previous_month: Un objeto de tipo date que representa el primer día del mes anterior, según allow_empty y allow_future.
Notas
Se utiliza un sufijo por defecto template_name_suffix de _archive_month.
Ejemplo 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
Ejemplo 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",
),
]
Ejemplo 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>
Vista de archivo semanal¶Una página de archivo semanal que muestra todos los objetos en una semana determinada. Los objetos con una fecha en el futuro no se muestran a menos que establezcas allow_future en True.
Ancestros (MRO)
Contexto
Además del contexto proporcionado por MultipleObjectMixin (a través de BaseDateListView), el contexto del template será:
week: Un objeto de tipo date que representa el primer día de la semana dada.
next_week: Un objeto de tipo date que representa el primer día de la siguiente semana, según allow_empty y allow_future.
previous_week: Un objeto de tipo date que representa el primer día de la semana anterior, según allow_empty y allow_future.
Notas
Se utiliza un sufijo por defecto template_name_suffix de _archive_week.
El week_format attribute es una cadena de formato para la función strptime() utilizada para parsear el número de semana. Los siguientes valores están soportados:
'%U': Basado en el sistema de semanas de los Estados Unidos donde la semana comienza el domingo. Este es el valor por defecto.
'%W': Similar a '%U', excepto que asume que la semana comienza el lunes. Esto no es lo mismo que el número de semana ISO 8601.
'%V': Número de semana ISO 8601 donde la semana comienza el lunes.
Ejemplo 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
Ejemplo 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",
),
]
Ejemplo 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>
En este ejemplo, estás imprimiendo el número de semana. Ten en cuenta que los números de semana calculados por el filtro de plantilla date con el carácter de formato 'W' no siempre son iguales a aquellos calculados por strftime() y strptime() con la cadena de formato '%W'. Por ejemplo, para el año 2015, los números de semana impuestos por date son mayores en uno comparado con aquellos impuestos por strftime(). No hay un equivalente para la cadena de formato '%U' strftime() en date. Por lo tanto, debes evitar usar date para generar URLs para WeekArchiveView.
Vista de archivo diario¶Página de archivo diaria que muestra todos los objetos en un día determinado. Los días del futuro lanzan una excepción 404, independientemente de si existen objetos para días futuros, a menos que establezcas allow_future en True.
Ancestros (MRO)
Contexto
Además del contexto proporcionado por MultipleObjectMixin (a través de BaseDateListView), el contexto del template será:
day: Un objeto date que representa el día dado.
next_day: Un objeto date que representa el día siguiente, según allow_empty y allow_future.
previous_day: Un objeto date que representa el día anterior, según allow_empty y allow_future.
next_month: Un objeto date que representa el primer día del siguiente mes, según allow_empty y allow_future.
previous_month: Un objeto de tipo date que representa el primer día del mes anterior, según allow_empty y allow_future.
Notas
Se utiliza un sufijo de nombre de plantilla por defecto _archive_day.
Ejemplo 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
Ejemplo 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",
),
]
Ejemplo 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>
Vista de archivo de hoy¶Una página de archivo diario que muestra todos los objetos para hoy. Esto es exactamente lo mismo que django.views.generic.dates.DayArchiveView, excepto que se utiliza la fecha de hoy en lugar de los argumentos year/month/day.
Ancestros (MRO)
Notas
Se utiliza un sufijo de nombre de plantilla por defecto de _archive_today.
Ejemplo 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
Ejemplo myapp/urls.py:
from django.urls import path
from myapp.views import ArticleTodayArchiveView
urlpatterns = [
path("today/", ArticleTodayArchiveView.as_view(), name="archive_today"),
]
¿Dónde está el ejemplo de la plantilla para TodayArchiveView?
Esta vista utiliza por defecto la misma plantilla que la DayArchiveView, que se muestra en el ejemplo anterior. Si necesitas una plantilla diferente, establece el atributo template_name para ser el nombre de la nueva plantilla.
Detalles de fecha¶Una página que representa un objeto individual. Si el objeto tiene un valor de fecha en el futuro, la vista lanzará por defecto un error 404, a menos que establezcas allow_future en True.
Ancestros (MRO)
Contexto
Incluye el objeto único asociado con la model especificada en la DateDetailView.
Notas
Utiliza un sufijo de nombre de plantilla por defecto de _detail.
Ejemplo 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",
),
]
Ejemplo myapp/article_detail.html:
<h1>{{ object.title }}</h1>
Nota
Todos los vistas genéricas enumeradas anteriormente tienen vistas de base que solo difieren en que no incluyen la MultipleObjectTemplateResponseMixin (para las vistas de archivo) o la SingleObjectTemplateResponseMixin (para la DateDetailView):
may 31, 2026