---
title: "基于日期的混入"
version: 5.2
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/5.2/ref/class-based-views/mixins-date-based/
canonical: https://djangodocs.dev/zh-hans/5.2/ref/class-based-views/mixins-date-based/
---
# 基于日期的混入

> **Note**
>
> 这些混入中的所有日期格式化属性都使用 [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 格式字符，请不要尝试使用 [`now`](/zh-hans/5.2/ref/templates/builtins/#std-templatetag-now) 模板标签的格式字符，因为它们不兼容。

## `YearMixin`

#### `class YearMixin`

一个可用于检索和提供日期的年份成分解析信息的混入。

**方法和属性**

#### `year_format`

[`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 格式，解析年份时使用。默认情况下，是 `'%Y'`。

#### `year`

**可选的** 年数值，为字符串。默认情况下，设置为 `None`，这意味着年份将通过其他方式确定。

#### `get_year_format()`

返回 [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 在解析年份时使用的格式。默认返回 [`year_format`](#django.views.generic.dates.YearMixin.year_format)。

#### `get_year()`

返回此视图将显示数据的年份，为一个字符串。按顺序尝试以下来源：

- [`YearMixin.year`](#django.views.generic.dates.YearMixin.year) 属性的值。
- URL 模式中捕获的 `year` 参数值。
- `GET` 查询  `year` 参数的值。

如果找不到有效的年份规格，则引发 404。

#### `get_next_year(date)`

返回一个日期对象，包含提供的日期后的第一年的第一天。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

#### `get_previous_year(date)`

返回一个日期对象，包含所提供日期前一年的第一天。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

## `MonthMixin`

#### `class MonthMixin`

一个可用于检索并提供日期中月份成分的解析信息的混入。

**方法和属性**

#### `month_format`

[`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 格式在解析月份时使用。默认情况下，是 `'%b'`。

#### `month`

**可选的** 月份数值，为字符串。默认情况下，设置为 `None`，这意味着月份将通过其他方式确定。

#### `get_month_format()`

返回 [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 在解析月份时使用的格式。默认返回 [`month_format`](#django.views.generic.dates.MonthMixin.month_format)。

#### `get_month()`

以字符串形式返回此视图将显示数据的月份。 按顺序尝试以下来源：

- [`MonthMixin.month`](#django.views.generic.dates.MonthMixin.month) 属性的值。
- URL 模式中捕获的 `month` 参数值。
- `GET` 查询  `month` 参数的值。

如果找不到有效的月份规格，则引发 404。

#### `get_next_month(date)`

返回一个日期对象，包含提供的日期后的第一个月的第一天。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

#### `get_previous_month(date)`

返回一个日期对象，包含所提供日期前一个月的第一天。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

## `DayMixin`

#### `class DayMixin`

一个可用于检索并提供日期中的日期成分的解析信息的混入。

**方法和属性**

#### `day_format`

[`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 格式，在解析日期时使用。默认情况下，是 `'%d'`。

#### `day`

**可选的** 日期的数值，为字符串。默认情况下，设置为 `None`，这意味着将使用其他方式确定日期。

#### `get_day_format()`

返回 [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 格式，用于解析当天的情况。默认返回 [`day_format`](#django.views.generic.dates.DayMixin.day_format)。

#### `get_day()`

返回此视图将显示数据的日期，为一个字符串。按顺序尝试以下来源：

- [`DayMixin.day`](#django.views.generic.dates.DayMixin.day) 属性的值。
- URL 模式中捕获的 `day` 参数值。
- `GET` 查询  `day` 参数的值。

如果找不到有效的日期规格，则引发 404。

#### `get_next_day(date)`

返回一个日期对象，包含提供的日期后的下一个有效日期。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

#### `get_previous_day(date)`

返回一个包含前一天有效日期的日期对象。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

## `WeekMixin`

#### `class WeekMixin`

一个可用于检索和提供日期的周成分的解析信息的混入。

**方法和属性**

#### `week_format`

[`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 格式，解析一周时使用。默认情况下，它是 `'%U'`，这意味着一周从周日开始。如果你的星期从周一开始，则设置为 ```'%W'``或 ``'%V'``` （ISO 8601 星期）。

#### `week`

**可选的** 周数值，为字符串。默认情况下，设置为 `None`，这意味着将使用其他方式确定星期。

#### `get_week_format()`

返回 [`strftime()`](https://docs.python.org/3/library/time.html#time.strftime) 在解析星期时要使用的格式。默认返回 [`week_format`](#django.views.generic.dates.WeekMixin.week_format)。

#### `get_week()`

返回此视图将显示数据的星期，为字符串。按顺序尝试以下来源：

- [`WeekMixin.week`](#django.views.generic.dates.WeekMixin.week) 属性的值。
- URL 模式中捕获的 `week` 参数值。
- `GET` 查询 `week` 参数的值。

如果找不到有效的周数规格，则引发 404。

#### `get_next_week(date)`

返回一个日期对象，包含提供的日期后的一周第一天。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

#### `get_prev_week(date)`

返回一个日期对象，包含提供的日期前一周的第一天。根据 [`allow_empty`](#django.views.generic.dates.BaseDateListView.allow_empty) 和 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future) 的值，该函数也可以返回 `None` 或引发 [`Http404`](/zh-hans/5.2/topics/http/views/#django.http.Http404) 异常。

## `DateMixin`

#### `class DateMixin`

一个混入类，为所有基于日期的视图提供通用行为。

**方法和属性**

#### `date_field`

`QuerySet` 模型中 `DateField` 或 `DateTimeField` 的名称，基于日期的档案应使用该名称来确定页面上显示的对象列表。

当 [时区支持](/zh-hans/5.2/topics/i18n/timezones/) 被启用，并且 `date_field` 是 `DateTimeField` 时，日期被认为是在当前时区。否则，查询集可以包括最终用户时区的前一天或第二天的对象。

> **Warning**
>
> 在这种情况下，如果你已经实现了每个用户的时区选择，那么根据最终用户的时区，同一个 URL 可能会显示一组不同的对象。为了避免这种情况，你应该使用一个 `DateField` 作为 `date_field` 属性。

#### `allow_future`

一个布尔值，用于指定是否将“未来”对象列入本页，其中“未来”是指 `date_field` 中指定的字段大于当前日期／时间的对象。默认情况下，这是 `False`。

#### `get_date_field()`

返回包含日期数据的字段名，该字段将在此视图上操作。默认返回 [`date_field`](#django.views.generic.dates.DateMixin.date_field)。

#### `get_allow_future()`

确定是否将“未来”对象包含在本页中，“未来”是指在 `date_field` 中指定的字段大于当前日期/时间的对象。默认返回 [`allow_future`](#django.views.generic.dates.DateMixin.allow_future)。

## `BaseDateListView`

#### `class BaseDateListView`

一个为所有基于日期的视图提供通用行为的基类。通常没有理由实例化 [`BaseDateListView`](#django.views.generic.dates.BaseDateListView); 实例化一个子类来代替。

当这个视图（及其子类）执行时，`self.object_list` 将包含该视图正在操作的对象列表，`self.date_list` 将包含可用数据的日期列表。

**混入**

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

**方法和属性**

#### `allow_empty`

一个布尔值，用于指定是否在没有对象的情况下显示页面。如果这个值为 `True`，并且没有可用的对象，视图将显示一个空页面，而不是引发 404。

这和 [`django.views.generic.list.MultipleObjectMixin.allow_empty`](/zh-hans/5.2/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin.allow_empty) 是一样的，只是默认值是 `False`。

#### `date_list_period`

**可选的** 定义 `date_list` 的聚合周期的字符串。它必须是 `'year'` （默认）、`'month'` 或 `'day'` 之一。

#### `get_dated_items()`

返回一个包含 (`date_list`, `object_list`, `extra_context`) 的三元元组。

`date_list` 是可用数据的日期列表。`object_list` 是对象的列表。`extra_context` 是上下文数据的字典，它将被添加到由 [`MultipleObjectMixin`](/zh-hans/5.2/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin) 提供的任何上下文数据中。

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

返回使用 `lookup` 定义的查询参数过滤的查询集。强制执行对查询集的任何限制，如 `allow_empty` 和 `allow_future`。

#### `get_date_list_period()`

返回 `date_list` 的聚合周期。默认返回 [`date_list_period`](#django.views.generic.dates.BaseDateListView.date_list_period)。

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

返回 `date_type` 类型的日期列表，其中 `queryset` 包含条目。例如，`get_date_list(qs, 'year')` 将返回 `qs` 有条目的年份列表。如果没有提供 `date_type`，则使用 [`get_date_list_period()`](#django.views.generic.dates.BaseDateListView.get_date_list_period) 的结果。`date_type` 和 `ordering` 被传递给 [`QuerySet.dates()`](/zh-hans/5.2/ref/models/querysets/#django.db.models.query.QuerySet.dates)。
