Общие представления дат
Представления на основе дат, предоставляемые в django.views.generic.dates, предназначены для отображения страниц детализации данных по датам.
Примечание
В некоторых примерах на этой странице предполагается, что модель Article определена следующим образом в myapp/models.py:
from django.db import models
from django.core.urlresolvers 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[source] -
Главная страница архива, отображающая «последние» объекты по дате. Объекты с датой в будущем не включаются, если вы не установите
allow_futureвTrue.Предки (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseArchiveIndexViewdjango.views.generic.dates.BaseDateListViewdjango.views.generic.list.MultipleObjectMixindjango.views.generic.dates.DateMixindjango.views.generic.base.View
Контекст
В дополнение к контексту, предоставленному
django.views.generic.list.MultipleObjectMixin(черезdjango.views.generic.dates.BaseDateListView), контекст шаблона будет включать:-
date_list: ОбъектQuerySet, содержащий все годы, для которых имеются доступные объекты в соответствии сqueryset, представленные как объектыdatetime.datetimeв обратном порядке.
Примечания
- Использует по умолчанию
context_object_nameзначениеlatest. - Использует по умолчанию
template_name_suffixзначение_archive. - По умолчанию предоставляет
date_listпо годам, но это можно изменить на месяц или день с помощью атрибутаdate_list_period. Это также относится ко всем представлениям подклассов.
Пример 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"), ]Пример myapp/article_archive.html:
<ul> {% for article in latest %} <li>{{ article.pub_date }}: {{ article.title }}</li> {% endfor %} </ul>Это выведет все статьи.
YearArchiveView
-
class YearArchiveView[source] -
Страница ежегодного архива, отображающая все доступные месяцы в данном году. Объекты с датой в будущем не отображаются, если вы не установите
allow_futureвTrue.Предки (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseYearArchiveViewdjango.views.generic.dates.YearMixindjango.views.generic.dates.BaseDateListViewdjango.views.generic.list.MultipleObjectMixindjango.views.generic.dates.DateMixindjango.views.generic.base.View
-
make_object_list -
Логическое значение, определяющее, нужно ли извлекать полный список объектов для данного года и передавать их шаблону. Если
True, список объектов будет доступен в контексте. ЕслиFalse, будет использоватьсяNoneнабор запросов в качестве списка объектов. По умолчанию этоFalse.
-
get_make_object_list() -
Определить, будет ли список объектов возвращен как часть контекста. По умолчанию возвращает
make_object_list.
Контекст
В дополнение к контексту, предоставленному
django.views.generic.list.MultipleObjectMixin(черезdjango.views.generic.dates.BaseDateListView), контекст шаблона будет включать:-
date_list: ОбъектQuerySet, содержащий все месяцы, для которых имеются доступные объекты в соответствии сqueryset, представленные как объектыdatetime.datetimeв порядке возрастания. -
year: Объектdate, представляющий заданный год. -
next_year: Объектdate, представляющий первый день следующего года в соответствии сallow_emptyиallow_future. -
previous_year: Объектdate, представляющий первый день предыдущего года в соответствии сallow_emptyиallow_future.
Примечания
- Использует по умолчанию
template_name_suffixзначение_archive_year.
Пример 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Пример 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"), ]Пример 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[source] -
Страница ежемесячного архива, отображающая все объекты за данный месяц. Объекты с датой в будущем не отображаются, если вы не установите
allow_futureвTrue.Предки (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseMonthArchiveViewdjango.views.generic.dates.YearMixindjango.views.generic.dates.MonthMixindjango.views.generic.dates.BaseDateListViewdjango.views.generic.list.MultipleObjectMixindjango.views.generic.dates.DateMixindjango.views.generic.base.View
Контекст
В дополнение к контексту, предоставляемому
MultipleObjectMixin(черезBaseDateListView), контекст шаблона будет следующим:-
date_list: ОбъектQuerySet, содержащий все дни, имеющие доступные объекты в данном месяце, согласноqueryset, представленные как объектыdatetime.datetimeв порядке возрастания. -
month: Объектdate, представляющий данный месяц. -
next_month: Объектdate, представляющий первый день следующего месяца, согласноallow_emptyиallow_future. -
previous_month: Объектdate, представляющий первый день предыдущего месяца, согласноallow_emptyиallow_future.
Примечания
- Использует по умолчанию
template_name_suffixзначение_archive_month.
Пример 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Пример 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"), ]Пример 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[source] -
Страница еженедельного архива, отображающая все объекты за данную неделю. Объекты с датой в будущем не отображаются, если вы не установите
allow_futureвTrue.Предки (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseWeekArchiveViewdjango.views.generic.dates.YearMixindjango.views.generic.dates.WeekMixindjango.views.generic.dates.BaseDateListViewdjango.views.generic.list.MultipleObjectMixindjango.views.generic.dates.DateMixindjango.views.generic.base.View
Контекст
В дополнение к контексту, предоставляемому
MultipleObjectMixin(черезBaseDateListView), контекст шаблона будет следующим:-
week: Объектdate, представляющий первый день заданной недели. -
next_week: Объектdate, представляющий первый день следующей недели, согласноallow_emptyиallow_future. -
previous_week: Объектdate, представляющий первый день предыдущей недели, согласноallow_emptyиallow_future.
Примечания
- Использует по умолчанию
template_name_suffixзначение_archive_week.
Пример 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Пример 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"), ]Пример 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:"F Y" }} {% endif %} {% if previous_week and next_week %}--{% endif %} {% if next_week %} Next week: {{ next_week|date:"F Y" }} {% endif %} </p>В этом примере вы выводите номер недели. По умолчанию
week_formatвWeekArchiveViewиспользует формат недели'%U', который основан на американской системе недель, где неделя начинается с воскресенья. Формат'%W'использует формат недели ISO, и его неделя начинается с понедельника. Формат'%W'одинаков как вstrftime(), так и вdate.Однако, фильтр шаблонов
dateне имеет эквивалентного формата вывода, который поддерживает американскую систему недель. Фильтрdate'%U'выводит количество секунд с эпохи Unix.
DayArchiveView
-
class DayArchiveView[source] -
Страница архива по дням, отображающая все объекты за данный день. Дни в будущем вызывают ошибку 404, независимо от того, существуют ли какие-либо объекты на будущие дни, если вы не установите
allow_futureвTrue.Предки (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseDayArchiveViewdjango.views.generic.dates.YearMixindjango.views.generic.dates.MonthMixindjango.views.generic.dates.DayMixindjango.views.generic.dates.BaseDateListViewdjango.views.generic.list.MultipleObjectMixindjango.views.generic.dates.DateMixindjango.views.generic.base.View
Контекст
В дополнение к контексту, предоставленному
MultipleObjectMixin(черезBaseDateListView), контекст шаблона будет включать:-
day: Объектdate, представляющий данный день. -
next_day: Объектdate, представляющий следующий день в соответствии сallow_emptyиallow_future. -
previous_day: Объектdate, представляющий предыдущий день в соответствии сallow_emptyиallow_future. -
next_month: Объектdate, представляющий первый день следующего месяца в соответствии сallow_emptyиallow_future. -
previous_month: Объектdate, представляющий первый день предыдущего месяца в соответствии сallow_emptyиallow_future.
Примечания
- Использует по умолчанию
template_name_suffixзначение_archive_day.
Пример 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Пример 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"), ]Пример 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[source] -
Страница архива по дням, отображающая все объекты за сегодня. Это точно такое же, как
django.views.generic.dates.DayArchiveView, за исключением того, что используется дата сегодня вместо аргументовyear/month/day.Предки (MRO)
django.views.generic.list.MultipleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseTodayArchiveViewdjango.views.generic.dates.BaseDayArchiveViewdjango.views.generic.dates.YearMixindjango.views.generic.dates.MonthMixindjango.views.generic.dates.DayMixindjango.views.generic.dates.BaseDateListViewdjango.views.generic.list.MultipleObjectMixindjango.views.generic.dates.DateMixindjango.views.generic.base.View
Примечания
- Использует по умолчанию
template_name_suffixзначение_archive_today.
Пример 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Пример myapp/urls.py:
from django.conf.urls import url from myapp.views import ArticleTodayArchiveView urlpatterns = [ url(r'^today/$', ArticleTodayArchiveView.as_view(), name="archive_today"), ]Где находится пример шаблона для
TodayArchiveView?Этот вид использует по умолчанию тот же шаблон, что и
DayArchiveView, который находится в предыдущем примере. Если вам нужен другой шаблон, установите атрибутtemplate_nameв имя нового шаблона.
DateDetailView
-
class DateDetailView[source] -
Страница, представляющая отдельный объект. Если у объекта есть дата в будущем, по умолчанию будет возвращена ошибка 404, если вы не установите
allow_futureвTrue.Предки (MRO)
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.dates.BaseDateDetailViewdjango.views.generic.dates.YearMixindjango.views.generic.dates.MonthMixindjango.views.generic.dates.DayMixindjango.views.generic.dates.DateMixindjango.views.generic.detail.BaseDetailViewdjango.views.generic.detail.SingleObjectMixindjango.views.generic.base.View
Контекст
- Включает единственный объект, связанный с
model, указанным вDateDetailView.
Примечания
- Использует значение по умолчанию
template_name_suffix_detail.
Пример 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"), ]Пример myapp/article_detail.html:
<h1>{{ object.title }}</h1>
Примечание
Все указанные выше обобщенные представления имеют соответствующие Base представления, которые отличаются только тем, что не включают MultipleObjectTemplateResponseMixin (для представлений архивов) или SingleObjectTemplateResponseMixin (для DateDetailView):
-
class BaseArchiveIndexView[source]
-
class BaseYearArchiveView[source]
-
class BaseMonthArchiveView[source]
-
class BaseWeekArchiveView[source]
-
class BaseDayArchiveView[source]
-
class BaseTodayArchiveView[source]
-
class BaseDateDetailView[source]
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.8/ref/class-based-views/generic-date-based/