“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
¶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)
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
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
context_object_name
padrão como latest
.template_name_suffix
padrão como _archive
.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
¶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)
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
¶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
.
get_make_object_list
()¶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
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
¶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)
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
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
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
¶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)
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
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
template_name_suffix
padrão como _archive_week
.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
¶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)
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
Context
Além do contexto fornecido pela MultipleObjectMixin
(via BaseDateListView
), o contexto do template será:
day
: Um objeto date
representando um dado dia.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
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
¶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)
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
Notas
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
¶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)
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
Context
model
especificado em DateDetailView
.Notas
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
):
BaseArchiveIndexView
¶BaseYearArchiveView
¶BaseMonthArchiveView
¶BaseWeekArchiveView
¶BaseDayArchiveView
¶BaseTodayArchiveView
¶BaseDateDetailView
¶mar. 08, 2023