基于日期的 mixins — Django 文档

来自菜鸟教程
Django/docs/3.1.x/ref/class-based-views/mixins-date-based
跳转至:导航、​搜索

基于日期的混合

笔记

这些 mixin 中的所有日期格式属性都使用 strftime() 格式字符。 不要尝试使用 :ttag:`now` 模板标签中的格式字符,因为它们不兼容。


YearMixin

class YearMixin

可用于检索和提供日期的年份部分的解析信息的 mixin。

方法和属性

year_format

解析年份时使用的 strftime() 格式。 默认情况下,这是 '%Y'

year

可选 年份的值,作为字符串。 默认情况下,设置为None,即使用其他方式确定年份。

get_year_format()

返回解析年份时使用的 strftime() 格式。 默认返回 year_format

get_year()

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

  • YearMixin.year 属性的值。

  • 在 URL 模式中捕获的 year 参数的值。

  • year GET 查询参数的值。

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

get_next_year(date)

返回一个日期对象,其中包含提供的日期之后的一年中的第一天。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。

get_previous_year(date)

返回一个日期对象,该对象包含所提供日期之前一年的第一天。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。


MonthMixin

class MonthMixin

可用于检索和提供日期的月份组件的解析信息的 mixin。

方法和属性

month_format

解析月份时使用的 strftime() 格式。 默认情况下,这是 '%b'

month

可选 月份的值,作为字符串。 默认情况下,设置为None,这意味着将使用其他方式确定月份。

get_month_format()

返回解析月份时使用的 strftime() 格式。 默认返回 month_format

get_month()

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

  • MonthMixin.month 属性的值。

  • 在 URL 模式中捕获的 month 参数的值。

  • month GET 查询参数的值。

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

get_next_month(date)

返回一个日期对象,该对象包含提供的日期之后的月份的第一天。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。

get_previous_month(date)

返回一个日期对象,该对象包含所提供日期之前一个月的第一天。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。


DayMixin

class DayMixin

可用于检索和提供日期的一天组件的解析信息的 mixin。

方法和属性

day_format

解析日期时使用的 strftime() 格式。 默认情况下,这是 '%d'

day

可选 一天的值,作为字符串。 默认情况下,设置为None,这意味着将通过其他方式确定日期。

get_day_format()

返回解析日期时使用的 strftime() 格式。 默认返回 day_format

get_day()

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

  • DayMixin.day 属性的值。

  • 在 URL 模式中捕获的 day 参数的值。

  • day GET 查询参数的值。

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

get_next_day(date)

返回包含提供的日期之后的下一个有效日期的日期对象。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。

get_previous_day(date)

返回包含前一个有效日期的日期对象。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。


WeekMixin

class WeekMixin

可用于检索和提供日期的周部分的解析信息的 mixin。

方法和属性

week_format

解析星期时使用的 strftime() 格式。 默认情况下,这是 '%U',这意味着一周从星期日开始。 如果您的一周从星期一开始,请将其设置为 '%W'

week

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

get_week_format()

返回解析星期时使用的 strftime() 格式。 默认返回 week_format

get_week()

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

  • WeekMixin.week 属性的值。

  • URL 模式中捕获的 week 参数的值

  • week GET 查询参数的值。

如果找不到有效的周规范,则引发 404。

get_next_week(date)

返回一个日期对象,其中包含提供的日期之后的一周的第一天。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。

get_prev_week(date)

返回一个日期对象,该对象包含所提供日期之前一周的第一天。 此函数还可以返回 None 或引发 Http404 异常,具体取决于 allow_emptyallow_future 的值。


DateMixin

class DateMixin

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

方法和属性

date_field

QuerySet 模型中 DateFieldDateTimeField 的名称,基于日期的存档应使用该名称来确定要在页面上显示的对象列表。

当启用 时区支持 并且 date_fieldDateTimeField 时,假定日期在当前时区。 否则,查询集可能包含来自最终用户时区的前一天或后一天的对象。

警告

在这种情况下,如果您实现了每个用户的时区选择,则相同的 URL 可能会显示一组不同的对象,具体取决于最终用户的时区。 为避免这种情况,您应该使用 DateField 作为 date_field 属性。

allow_future

一个布尔值,指定是否在此页面上包含“未来”对象,其中“未来”表示 date_field 中指定的字段大于当前日期/时间的对象。 默认情况下,这是 False

get_date_field()

返回包含此视图将操作的日期数据的字段的名称。 默认返回 date_field

get_allow_future()

判断该页面是否包含“future”对象,其中“future”表示date_field中指定的字段大于当前日期/时间的对象。 默认返回 allow_future


BaseDateListView

class BaseDateListView

为所有基于日期的视图提供通用行为的基类。 通常没有理由实例化 BaseDateListView; 而是实例化其中一个子类。

当这个视图(及其子类)正在执行时,self.object_list 将包含视图正在操作的对象列表,而 self.date_list 将包含数据可用的日期列表。

混合

方法和属性

allow_empty

一个布尔值,指定在没有可用对象时是否显示页面。 如果这是 True 并且没有可用的对象,则视图将显示一个空页面而不是引发 404。

这与 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) 的 3 元组。

date_list 是数据可用的日期列表。 object_list 是对象列表。 extra_context 是一个上下文数据字典,它将被添加到 MultipleObjectMixin 提供的任何上下文数据中。

get_dated_queryset(**lookup)

返回一个查询集,使用 lookup 定义的查询参数过滤。 对查询集实施任何限制,例如 allow_emptyallow_future

get_date_list_period()

返回 date_list 的聚合周期。 默认返回 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() 的结果。 date_typeordering 被传递给 QuerySet.dates()