“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
[código fonte]¶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
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.conf.urls import url
from django.views.generic.dates import ArchiveIndexView
from myapp.models import Article
urlpatterns = [
url(r'^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
[código fonte]¶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
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.conf.urls import url
from myapp.views import ArticleYearArchiveView
urlpatterns = [
url(r'^(?P<year>[0-9]{4})/$',
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
[código fonte]¶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
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.conf.urls import url
from myapp.views import ArticleMonthArchiveView
urlpatterns = [
# Example: /2012/aug/
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/$',
ArticleMonthArchiveView.as_view(),
name="archive_month"),
# Example: /2012/08/
url(r'^(?P<year>[0-9]{4})/(?P<month>[0-9]+)/$',
ArticleMonthArchiveView.as_view(month_format='%m'),
name="archive_month_numeric"),
]
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
[código fonte]¶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
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.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.conf.urls import url
from myapp.views import ArticleWeekArchiveView
urlpatterns = [
# Example: /2012/week/23/
url(r'^(?P<year>[0-9]{4})/week/(?P<week>[0-9]+)/$',
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
[código fonte]¶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.
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.conf.urls import url
from myapp.views import ArticleDayArchiveView
urlpatterns = [
# Example: /2012/nov/10/
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/(?P<day>[0-9]+)/$',
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
[código fonte]¶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
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.conf.urls import url
from myapp.views import ArticleTodayArchiveView
urlpatterns = [
url(r'^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
[código fonte]¶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
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.conf.urls import url
from django.views.generic.dates import DateDetailView
urlpatterns = [
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/(?P<day>[0-9]+)/(?P<pk>[0-9]+)/$',
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
[código fonte]¶BaseYearArchiveView
[código fonte]¶BaseMonthArchiveView
[código fonte]¶BaseWeekArchiveView
[código fonte]¶BaseDayArchiveView
[código fonte]¶BaseTodayArchiveView
[código fonte]¶BaseDateDetailView
[código fonte]¶abr 04, 2017