# Documentação Django 5.2.8

# “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

  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.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

  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.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

  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.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

  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.

    - `'%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`

class 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.

  - 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`

class 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

  - 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`

class 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

  - 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`):

class BaseArchiveIndexView

class BaseYearArchiveView

class BaseMonthArchiveView

class BaseWeekArchiveView

class BaseDayArchiveView

class BaseTodayArchiveView

class BaseDateDetailView