多对象混合 — Django 文档
多对象混合
MultipleObjectMixin
- class django.views.generic.list.MultipleObjectMixin
可用于显示对象列表的 mixin。
如果指定了
paginate_by
,Django 会对 this 返回的结果进行分页。 您可以通过以下两种方式之一指定 URL 中的页码:使用 URLconf 中的
page
参数。 例如,您的 URLconf 可能如下所示:path('objects/page<int:page>/', PaginatedView.as_view()),
通过
page
查询字符串参数传递页码。 例如,一个 URL 看起来像这样:/objects/?page=3
这些值和列表是基于 1 的,而不是基于 0 的,因此第一页将表示为页
1
。有关分页的更多信息,请阅读 分页文档 。
作为一种特殊情况,您还可以使用
last
作为page
的值:/objects/?page=last
这使您可以访问结果的最后一页,而无需先确定有多少页。
请注意,
page
必须 是有效页码或值last
;page
的任何其他值都将导致 404 错误。扩展
方法和属性
- allow_empty
一个布尔值,指定在没有可用对象时是否显示页面。 如果这是
False
并且没有可用的对象,则视图将引发 404 而不是显示空页面。 默认情况下,这是True
。
- model
此视图将为其显示数据的模型。 指定
model = Foo
与指定queryset = Foo.objects.all()
实际上相同,其中objects
代表Foo
的 默认管理器 。
- queryset
表示对象的
QuerySet
。 如果提供,queryset
的值将取代为 model 提供的值。警告
queryset
是一个具有 mutable 值的类属性,因此直接使用它时必须小心。 在使用它之前,要么调用它的 all() 方法,要么用 get_queryset() 检索它,它负责幕后的克隆。
- ordering
一个字符串或字符串列表,指定应用于
queryset
的排序。 有效值与 order_by() 的值相同。
- paginate_by
一个整数,指定每页应显示多少个对象。 如果给出,视图将使用
paginate_by
对象每页对对象进行分页。 该视图将需要page
查询字符串参数(通过request.GET
)或 URLconf 中指定的page
变量。
- paginate_orphans
一个整数,指定最后一页可以包含的“溢出”对象的数量。 这将最后一页的 paginate_by 限制扩展到
paginate_orphans
,以防止最后一页的对象数量非常少。
- page_kwarg
一个字符串,指定用于页面参数的名称。 该视图将期望此参数可用作查询字符串参数(通过
request.GET
)或用作 URLconf 中指定的 kwarg 变量。 默认为page
。
- paginator_class
用于分页的分页器类。 默认情况下,使用 django.core.paginator.Paginator。 如果自定义分页器类没有与 django.core.paginator.Paginator 相同的构造函数接口,您还需要提供 get_paginator() 的实现。
- context_object_name
指定要在上下文中使用的变量的名称。
- get_queryset()
获取此视图的项目列表。 这必须是一个可迭代的,并且可能是一个查询集(其中将启用特定于查询集的行为)。
- get_ordering()
返回定义将应用于
queryset
的排序的字符串(或可迭代的字符串)。默认返回 ordering。
- paginate_queryset(queryset, page_size)
返回包含 (
paginator
,page
,object_list
,is_paginated
) 的 4 元组。通过将
queryset
分页为page_size
大小的页面来构建。 如果请求包含page
参数,作为捕获的 URL 参数或作为 GET 参数,object_list
将对应于来自该页面的对象。
- get_paginate_by(queryset)
返回要分页的项目数,或
None
不分页。 默认情况下,这将返回 paginate_by 的值。
- get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True)
返回要用于此视图的分页器实例。 默认情况下,实例化 paginator_class 的实例。
- get_paginate_orphans()
一个整数,指定最后一页可以包含的“溢出”对象的数量。 默认情况下,它返回 paginate_orphans 的值。
- get_allow_empty()
返回一个布尔值,指定在没有可用对象时是否显示页面。 如果此方法返回
False
并且没有可用的对象,则视图将引发 404 而不是显示空页面。 默认情况下,这是True
。
- get_context_object_name(object_list)
返回将用于包含此视图正在处理的数据列表的上下文变量名称。 如果
object_list
是 Django 对象的查询集并且 context_object_name 未设置,则上下文名称将是构成查询集的模型的model_name
,后缀为 [ X191X] 附加。 例如,模型Article
将有一个名为article_list
的上下文对象。
- get_context_data(**kwargs)
返回用于显示对象列表的上下文数据。
语境
object_list
:此视图显示的对象列表。 如果指定了context_object_name
,该变量也将在上下文中设置,其值与object_list
相同。is_paginated
:表示结果是否分页的布尔值。 具体而言,如果未指定页面大小,或者可用对象不跨越多个页面,则将其设置为False
。paginator
:django.core.paginator.Paginator 的一个实例。 如果页面没有分页,这个上下文变量将为None
。page_obj
:django.core.paginator.Page 的一个实例。 如果页面没有分页,这个上下文变量将为None
。
MultipleObjectTemplateResponseMixin
- class django.views.generic.list.MultipleObjectTemplateResponseMixin
一个混合类,为在对象实例列表上操作的视图执行基于模板的响应呈现。 要求与它混合的视图提供
self.object_list
,即视图正在操作的对象实例列表。self.object_list
可以是,但不是必须是,QuerySet。扩展
方法和属性
- template_name_suffix
附加到自动生成的候选模板名称的后缀。 默认后缀为
_list
。
- get_template_names()
返回候选模板名称列表。 返回以下列表:
视图上
template_name
的值(如果提供)<app_label>/<model_name><template_name_suffix>.html