“Views” de datas genéricasLink para este cabeçalho

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

ArchiveIndexViewLink para este cabeçalho

class ArchiveIndexViewLink para esta definição

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:

Code
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:

Django template
<ul>
    {% for article in latest %}
        <li>{{ article.pub_date }}: {{ article.title }}</li>
    {% endfor %}
</ul>

Isso irá retornar todos os artigos.

YearArchiveViewLink para este cabeçalho

class YearArchiveViewLink para esta definição

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)

make_object_listLink para esta definição

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()Link para esta definição

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:

Code
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:

Code
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:

Django template
<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>

MonthArchiveViewLink para este cabeçalho

class MonthArchiveViewLink para esta definição

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:

Code
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:

Code
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:

Django template
<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>

WeekArchiveViewLink para este cabeçalho

class WeekArchiveViewLink para esta definição

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:

Code
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:

Code
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:

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

DayArchiveViewLink para este cabeçalho

class DayArchiveViewLink para esta definição

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á:

Notas

  • Usa um template_name_suffix padrão como _archive_day.

Exemplo myapp/views.py:

Code
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:

Code
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:

Django template
<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>

TodayArchiveViewLink para este cabeçalho

class TodayArchiveViewLink para esta definição

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:

Code
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:

Code
from django.urls import path

from myapp.views import ArticleTodayArchiveView

urlpatterns = [
    path("today/", ArticleTodayArchiveView.as_view(), name="archive_today"),
]

DateDetailViewLink para este cabeçalho

class DateDetailViewLink para esta definição

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:

Code
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:

Django template
<h1>{{ object.title }}</h1>