“Views” de datas genéricas¶
“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¶
- class 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_futurecomoTrue.Ancestrais (MRO)
Context
Além do contexto fornecido pelo
django.views.generic.list.MultipleObjectMixin(através dadjango.views.generic.dates.BaseDateListView), o contexto do template será:date_list: Um objetoQuerySetcontendo todos os anos que tenham objetos disponíveis de acordo com oqueryset, representado como objetosdatetime.datetime, em ordem ascendente.
Notas
Usa um
context_object_namepadrão comolatest.Usa um
template_name_suffixpadrão como_archive.Por padrão fornece
date_listpor ano, mas isso pode ser alterado para mês ou dia usando o atributodate_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¶
- class 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_futurecomoTrue.Ancestrais (MRO)
- 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. SeFalse, o “queryset”Noneserá 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_listpor padrão.
Context
Além do contexto fornecido pelo
django.views.generic.list.MultipleObjectMixin(através dadjango.views.generic.dates.BaseDateListView), o contexto do template será:date_list: Um objetoQuerySetcontendo todos os meses que tenham objetos disponíveis de acordo com oqueryset, representado como objetosdatetime.datetimeem order ascendente.year: Um objetodaterepresentando um dado ano.next_year: Um objeto do tipodaterepresentando o primeiro dia do próximo ano, de acordo comallow_emptyeallow_future.previous_year: Um objetodaterepresentando o primeiro dia do ano anterior, de acordo comallow_emptyeallow_future.
Notas
Usa um
template_name_suffixpadrã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¶
- class 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_futurecomoTrue.Ancestrais (MRO)
Context
Além do contexto fornecido pela
MultipleObjectMixin(viaBaseDateListView), o contexto do template será:date_list: Um objeto do tipoQuerySetcontendo todo os dias que tenham objetos disponíveis no dado mês, de cordo com oqueryset, representando como objetos do tipodatetime.datetime, em orderm ascendente.month: Um objeto do tipodaterepresentando o dado mês.next_month: Um objetodateque representa o primeiro dia do próximo mês, de acordo comallow_emptyeallow_future.previous_month: Um objetodateque representa o primeiro dia do mês anterior, de acordo comallow_emptyeallow_future.
Notas
Usa um
template_name_suffixpadrã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¶
- class 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_futurecomoTrue.Ancestrais (MRO)
Context
Além do contexto fornecido pela
MultipleObjectMixin(viaBaseDateListView), o contexto do template será:week: Um objetodateque representa o primeiro dia de uma dada semana.next_week: Um objeto do tipodaterepresentando o primeiro dia da próxima semana, de acordo comallow_emptyeallow_future.previous_week: Um objetodaterepresentando o primeiro dia da semana anterior, de acordo comallow_emptyeallow_future.
Notas
Usa um
template_name_suffixpadrão como_archive_week.O atributo
week_formaté uma string de formtação do tipostrptime()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
datecom o caractere'W'não é extamente o mesmo que os computados pelostrftime()estrptime()com a string de formatação'%W'. No ano de 2015, por exemplo, a exibição dos números da semana pelodatesão maiores que outras se comparadas com a saída pelostrftime(). Não há um equivalente para a string de formatação'%U'strftime(). Por tanto, você deve evitar o uso dedatepara gerar URLs paraWeekArchiveView.
DayArchiveView¶
- class 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_futurecomoTrue.Ancestrais (MRO)
Context
Além do contexto fornecido pela
MultipleObjectMixin(viaBaseDateListView), o contexto do template será:day: Um objetodaterepresentando um dado dia.next_day`: Um objeto do tipo
daterepresentando o próximo dia de acordo comallow_emptyeallow_future.previous_day: Um objeto do tipodaterepresentando o dia anterior de acordo comallow_emptyeallow_future.next_month: Um objetodateque representa o primeiro dia do próximo mês, de acordo comallow_emptyeallow_future.previous_month: Um objetodateque representa o primeiro dia do mês anterior, de acordo comallow_emptyeallow_future.
Notas
Usa um
template_name_suffixpadrã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¶
- class 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 argumentosyear/month/dayAncestrais (MRO)
Notas
Usa um
template_name_suffixpadrã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
DayArchiveViewdo exemplo anterior. Se você precisa de um template diferente, defina o nome do novo template no atributotemplate_name.
DateDetailView¶
- class 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_futurecomoTrue.Ancestrais (MRO)
Context
Inclui um único objeto associado ao
modelespecificado emDateDetailView.
Notas
Usa um
template_name_suffixpadrã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):
- class BaseArchiveIndexView[código-fonte]¶
- class BaseYearArchiveView[código-fonte]¶
- class BaseMonthArchiveView[código-fonte]¶
- class BaseWeekArchiveView[código-fonte]¶
- class BaseDayArchiveView[código-fonte]¶
- class BaseTodayArchiveView[código-fonte]¶
- class BaseDateDetailView[código-fonte]¶