“Views” genéricas baseadas em datas, fornecidas no django.views.generic.dates
, são “views” para mostrar páginas de resumo de dados baseados em datas.
Nota
Alguns dos exmplos nesta página assumem que um modelo de Article
foi definido com a seguir em 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
¶Uma página de índice de n;ível superior que mostra os últimos (“latest”) objetos, por data. Objetos com uma data no futuro não estão incluídos a menos que seja definido allow_future
como True
.
Ancestrais (MRO)
Context
Além do contexto fornecido pelo django.views.generic.list.MultipleObjectMixin
(através da django.views.generic.dates.BaseDateListView
), o contexto do template será:
date_list
: Um objeto QuerySet
contendo todos os anos que tenham objetos disponíveis de acordo com o queryset
, representado como objetos datetime.datetime
, em ordem ascendente.
Notas
Usa um context_object_name
padrão como latest
.
Usa um template_name_suffix
padrão como _archive
.
Por padrão fornece date_list
por ano, mas isso pode ser alterado para mês ou dia usando o atributo date_list_period
. Isso se aplica a todas as subclasses de “views”.
Exemplo 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",
),
]
Exemplo myapp/article_archive.html:
<ul>
{% for article in latest %}
<li>{{ article.pub_date }}: {{ article.title }}</li>
{% endfor %}
</ul>
Isso irá retornar todos os artigos.
YearArchiveView
¶Uma página de arquivos anuais mostrando todos os meses disponíveis em um dado ano. Objetos com uma data no futuro não são mostrados a menos que defina allow_future
como True
.
Ancestrais (MRO)
Um booleano que especifica se retorna ou não a lista toda de objetos para este ano e os passa para o template. Se True
, a lista de objetos será disponibilizada no contexto. Se False
, o “queryset” None
será usado como a lista de objetos. Por padrão isso é False
.
Determina se uma lista de objetos será retonado como parte do contexto. Retorna make_object_list
por padrão.
Context
Além do contexto fornecido pelo django.views.generic.list.MultipleObjectMixin
(através da django.views.generic.dates.BaseDateListView
), o contexto do template será:
date_list
: Um objeto QuerySet
contendo todos os meses que tenham objetos disponíveis de acordo com o queryset
, representado como objetos datetime.datetime
em order ascendente.
year
: Um objeto date
representando um dado ano.
next_year
: Um objeto do tipo date
representando o primeiro dia do próximo ano, de acordo com allow_empty
e allow_future
.
previous_year
: Um objeto date
representando o primeiro dia do ano anterior, de acordo com allow_empty
e allow_future
.
Notas
Usa um template_name_suffix
padrão como _archive_year
.
Exemplo 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
Exemplo myapp/urls.py:
from django.urls import path
from myapp.views import ArticleYearArchiveView
urlpatterns = [
path("<int:year>/", ArticleYearArchiveView.as_view(), name="article_year_archive"),
]
Exemplo 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
¶Uma página de arquivo mensal mostrando todos os objetos em um dado mês. Objetos com uma data no futuro não são mostrados a menos que defina allow_future
como True
.
Ancestrais (MRO)
Context
Além do contexto fornecido pela MultipleObjectMixin
(via BaseDateListView
), o contexto do template será:
date_list
: Um objeto do tipo QuerySet
contendo todo os dias que tenham objetos disponíveis no dado mês, de cordo com o queryset
, representando como objetos do tipo datetime.datetime
, em orderm ascendente.
month
: Um objeto do tipo date
representando o dado mês.
next_month
: Um objeto date
que representa o primeiro dia do próximo mês, de acordo com allow_empty
e allow_future
.
previous_month
: Um objeto date
que representa o primeiro dia do mês anterior, de acordo com allow_empty
e allow_future
.
Notas
Usa um template_name_suffix
padrão como _archive_month
.
Exemplo 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
Exemplo 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",
),
]
Exemplo 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
¶Uma página de arquivo semanal mostrando todos os objetos em determinada semana. Objetos com uma data no futuro não são exibidos a menos que você defina allow_future
como True
.
Ancestrais (MRO)
Context
Além do contexto fornecido pela MultipleObjectMixin
(via BaseDateListView
), o contexto do template será:
week
: Um objeto date
que representa o primeiro dia de uma dada semana.
next_week
: Um objeto do tipo date
representando o primeiro dia da próxima semana, de acordo com allow_empty
e allow_future
.
previous_week
: Um objeto date
representando o primeiro dia da semana anterior, de acordo com allow_empty
e allow_future
.
Notas
Usa um template_name_suffix
padrão como _archive_week
.
O atributo week_format
é uma string de formtação do tipo strptime()
usada para formatar o número da semana. Os seguintes valores são permitidos:
'%U'
: Baseado no sistema de semanas do Estados Unidos onde a semana começa no Domingo. Este é o valor padrão.
'%W'
: Similar to '%U'
, except it assumes that the week
begins on Monday. This is not the same as the ISO 8601 week number.
'%V'
: ISO 8601 week number where the week begins on Monday.
Exemplo 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
Exemplo 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",
),
]
Exemplo 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>
Nesse exemplo, você está exibindo o número da semana. Note que os números da semana computados pelo filtro de template date
com o caractere 'W'
não é extamente o mesmo que os computados pelo strftime()
e strptime()
com a string de formatação '%W'
. No ano de 2015, por exemplo, a exibição dos números da semana pelo date
são maiores que outras se comparadas com a saída pelo strftime()
. Não há um equivalente para a string de formatação '%U'
strftime()
. Por tanto, você deve evitar o uso de date
para gerar URLs para WeekArchiveView
.
DayArchiveView
¶Uma página de arquivo diária mostrando todos os objetos em determinado dia. Dias no futuro retornam erro 404, independente da existência de objetos com dias futuros, a menos que você defina allow_future
como True
.
Ancestrais (MRO)
Context
Além do contexto fornecido pela MultipleObjectMixin
(via BaseDateListView
), o contexto do template será:
day
: Um objeto date
representando um dado dia.
next_day`: Um objeto do tipo date
representando o próximo dia de acordo com allow_empty
e allow_future
.
previous_day
: Um objeto do tipo date
representando o dia anterior de acordo com allow_empty
e allow_future
.
next_month
: Um objeto date
que representa o primeiro dia do próximo mês, de acordo com allow_empty
e allow_future
.
previous_month
: Um objeto date
que representa o primeiro dia do mês anterior, de acordo com allow_empty
e allow_future
.
Notas
Usa um template_name_suffix
padrão como _archive_day
.
Exemplo 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
Exemplo 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",
),
]
Exemplo 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
¶Uma página de arquivo diária mostrando todos os objetos de “hoje”. Isso é exatamente o mesmo que django.views.generic.dates.DayArchiveView
, exceto que a data de “hoje” é usada ao invés dos argumentos year
/month
/day
Ancestrais (MRO)
Notas
Usa um template_name_suffix
padrão como _archive_today
.
Exemplo 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
Exemplo myapp/urls.py:
from django.urls import path
from myapp.views import ArticleTodayArchiveView
urlpatterns = [
path("today/", ArticleTodayArchiveView.as_view(), name="archive_today"),
]
Onde está o template de exemplo do TodayArchiveView
?
Essa view usa por padrão o mesmo template do DayArchiveView
do exemplo anterior. Se você precisa de um template diferente, defina o nome do novo template no atributo template_name
.
DateDetailView
¶Uma página representando um objeto individual. Se o objeto possui uma data no futuro, a view irá gerar um erro 404 por padrão, a menos que você defina allow_future
como True
.
Ancestrais (MRO)
Context
Inclui um único objeto associado ao model
especificado em DateDetailView
.
Notas
Usa um template_name_suffix
padrão como _detail
.
Exemplo 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",
),
]
Exemplo myapp/article_detail.html:
<h1>{{ object.title }}</h1>
Nota
Todas as “views” genéricas listadas acima casam com as views Base
com a diferença que elas não incluem o MultipleObjectTemplateResponseMixin
(para views de arquivo) ou SingleObjectTemplateResponseMixin
(para a DateDetailView
):
abr. 23, 2025