---
title: "Date-based mixins"
version: 2.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/2.2/ref/class-based-views/mixins-date-based/
canonical: https://djangodocs.dev/zh-hans/2.2/ref/class-based-views/mixins-date-based/
---
# Date-based mixins

> **Note**
>
> All the date formatting attributes in these mixins use
> [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format characters. Do not try to use the format
> characters from the [`now`](/zh-hans/2.2/ref/templates/builtins/#std-templatetag-now) template tag as they are not compatible.

## `YearMixin`

#### `class YearMixin`

A mixin that can be used to retrieve and provide parsing information for a
year component of a date.

**Methods and Attributes**

#### `year_format`

The [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the year.
By default, this is `'%Y'`.

#### `year`

**Optional** The value for the year, as a string. By default, set to
`None`, which means the year will be determined using other means.

#### `get_year_format()`

Returns the [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the
year. Returns [`year_format`](#django.views.generic.dates.YearMixin.year_format) by default.

#### `get_year()`

Returns the year for which this view will display data, as a string.
Tries the following sources, in order:

- The value of the [`YearMixin.year`](#django.views.generic.dates.YearMixin.year) attribute.
- The value of the `year` argument captured in the URL pattern.
- The value of the `year` `GET` query argument.

Raises a 404 if no valid year specification can be found.

#### `get_next_year(date)`

Returns a date object containing the first day of the year after the
date provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

#### `get_previous_year(date)`

Returns a date object containing the first day of the year before the
date provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

## `MonthMixin`

#### `class MonthMixin`

A mixin that can be used to retrieve and provide parsing information for a
month component of a date.

**Methods and Attributes**

#### `month_format`

The [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the month. By
default, this is `'%b'`.

#### `month`

**Optional** The value for the month, as a string. By default, set to
`None`, which means the month will be determined using other means.

#### `get_month_format()`

Returns the [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the
month. Returns [`month_format`](#django.views.generic.dates.MonthMixin.month_format) by default.

#### `get_month()`

Returns the month for which this view will display data, as a string.
Tries the following sources, in order:

- The value of the [`MonthMixin.month`](#django.views.generic.dates.MonthMixin.month) attribute.
- The value of the `month` argument captured in the URL pattern.
- The value of the `month` `GET` query argument.

Raises a 404 if no valid month specification can be found.

#### `get_next_month(date)`

Returns a date object containing the first day of the month after the
date provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

#### `get_previous_month(date)`

Returns a date object containing the first day of the month before the
date provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

## `DayMixin`

#### `class DayMixin`

A mixin that can be used to retrieve and provide parsing information for a
day component of a date.

**Methods and Attributes**

#### `day_format`

The [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the day. By
default, this is `'%d'`.

#### `day`

**Optional** The value for the day, as a string. By default, set to
`None`, which means the day will be determined using other means.

#### `get_day_format()`

Returns the [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the day.
Returns [`day_format`](#django.views.generic.dates.DayMixin.day_format) by default.

#### `get_day()`

Returns the day for which this view will display data, as a string.
Tries the following sources, in order:

- The value of the [`DayMixin.day`](#django.views.generic.dates.DayMixin.day) attribute.
- The value of the `day` argument captured in the URL pattern.
- The value of the `day` `GET` query argument.

Raises a 404 if no valid day specification can be found.

#### `get_next_day(date)`

Returns a date object containing the next valid day after the date
provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

#### `get_previous_day(date)`

Returns a date object containing the previous valid day. This function
can also return `None` or raise an [`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404)
exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

## `WeekMixin`

#### `class WeekMixin`

A mixin that can be used to retrieve and provide parsing information for a
week component of a date.

**Methods and Attributes**

#### `week_format`

The [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the week. By
default, this is `'%U'`, which means the week starts on Sunday. Set
it to `'%W'` if your week starts on Monday.

#### `week`

**Optional** The value for the week, as a string. By default, set to
`None`, which means the week will be determined using other means.

#### `get_week_format()`

Returns the [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) format to use when parsing the
week. Returns [`week_format`](#django.views.generic.dates.WeekMixin.week_format) by default.

#### `get_week()`

Returns the week for which this view will display data, as a string.
Tries the following sources, in order:

- The value of the [`WeekMixin.week`](#django.views.generic.dates.WeekMixin.week) attribute.
- The value of the `week` argument captured in the URL pattern
- The value of the `week` `GET` query argument.

Raises a 404 if no valid week specification can be found.

#### `get_next_week(date)`

Returns a date object containing the first day of the week after the
date provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

#### `get_prev_week(date)`

Returns a date object containing the first day of the week before the
date provided. This function can also return `None` or raise an
[`Http404`](/zh-hans/2.2/topics/http/views/#django.http.Http404) exception, depending on the values of
[`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) and
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future).

## `DateMixin`

#### `class DateMixin`

A mixin class providing common behavior for all date-based views.

**Methods and Attributes**

#### `date_field`

The name of the `DateField` or `DateTimeField` in the
`QuerySet`’s model that the date-based archive should use to
determine the list of objects to display on the page.

When [time zone support](/zh-hans/2.2/topics/i18n/timezones/) is enabled and
`date_field` is a `DateTimeField`, dates are assumed to be in the
current time zone. Otherwise, the queryset could include objects from
the previous or the next day in the end user's time zone.

> **Warning**
>
> In this situation, if you have implemented per-user time zone
> selection, the same URL may show a different set of objects,
> depending on the end user's time zone. To avoid this, you should
> use a `DateField` as the `date_field` attribute.

#### `allow_future`

A boolean specifying whether to include "future" objects on this page,
where "future" means objects in which the field specified in
`date_field` is greater than the current date/time. By default, this
is `False`.

#### `get_date_field()`

Returns the name of the field that contains the date data that this
view will operate on. Returns [`date_field`](#django.views.generic.dates.DateMixin.date_field) by default.

#### `get_allow_future()`

Determine whether to include "future" objects on this page, where
"future" means objects in which the field specified in `date_field`
is greater than the current date/time. Returns
[`allow_future`](#django.views.generic.dates.DateMixin.allow_future) by default.

## `BaseDateListView`

#### `class BaseDateListView`

A base class that provides common behavior for all date-based views. There
won't normally be a reason to instantiate
[`BaseDateListView`](#django.views.generic.dates.BaseDateListView); instantiate one of
the subclasses instead.

While this view (and its subclasses) are executing, `self.object_list`
will contain the list of objects that the view is operating upon, and
`self.date_list` will contain the list of dates for which data is
available.

**Mixins**

- [`DateMixin`](#django.views.generic.dates.DateMixin)
- [`MultipleObjectMixin`](/zh-hans/2.2/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin)

**Methods and Attributes**

#### `allow_empty`

A boolean specifying whether to display the page if no objects are
available. If this is `True` and no objects are available, the view
will display an empty page instead of raising a 404.

This is identical to
[`django.views.generic.list.MultipleObjectMixin.allow_empty`](/zh-hans/2.2/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin.allow_empty),
except for the default value, which is `False`.

#### `date_list_period`

**Optional** A string defining the aggregation period for
`date_list`. It must be one of `'year'` (default), `'month'`, or
`'day'`.

#### `get_dated_items()`

Returns a 3-tuple containing (`date_list`, `object_list`,
`extra_context`).

`date_list` is the list of dates for which data is available.
`object_list` is the list of objects. `extra_context` is a
dictionary of context data that will be added to any context data
provided by the
[`MultipleObjectMixin`](/zh-hans/2.2/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin).

#### `get_dated_queryset(**lookup)`

Returns a queryset, filtered using the query arguments defined by
`lookup`. Enforces any restrictions on the queryset, such as
`allow_empty` and `allow_future`.

#### `get_date_list_period()`

Returns the aggregation period for `date_list`. Returns
[`date_list_period`](#django.views.generic.dates.BaseDateListView.date_list_period) by default.

#### `get_date_list(queryset, date_type=None, ordering='ASC')`

Returns the list of dates of type `date_type` for which `queryset`
contains entries. For example, `get_date_list(qs, 'year')` will
return the list of years for which `qs` has entries. If
`date_type` isn't provided, the result of
[`get_date_list_period()`](#django.views.generic.dates.BaseDateListView.get_date_list_period) is used. `date_type`
and `ordering` are simply passed to
[`QuerySet.dates()`](/zh-hans/2.2/ref/models/querysets/#django.db.models.query.QuerySet.dates).
