Skip to main content

多个对象混合

MultipleObjectMixin

class django.views.generic.list.MultipleObjectMixin

一个可用于显示对象列表的mixin。

如果指定了 paginate_by,Django将对由此返回的结果进行分页。您可以通过以下两种方法之一在网址中指定页码:

  • 在URLconf中使用 page 参数。例如,这是您的URLconf可能是什么样子:

    url(r'^objects/page(?P<page>[0-9]+)/$', PaginatedView.as_view()),
    
  • 通过 page 查询字符串参数传递页码。例如,一个URL看起来像这样:

    /objects/?page=3
    

这些值和列表是基于1的,而不是基于0的,因此第一页将被表示为页 1

有关分页的更多信息,请阅读 分页文档

作为特殊情况,您还可以使用 last 作为 page 的值:

/objects/?page=last

这允许您访问结果的最后一页,而无需首先确定有多少页。

注意,page must 是有效的页码或值 lastpage 的任何其他值将导致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

一个整数,指定最后一页可以包含的“overflow”对象的数量。这将最后一页上的 paginate_by 限制扩展到 paginate_orphans,以便保持最后一页具有非常少量的对象。

page_kwarg

指定用于页面参数的名称的字符串。视图将期望此参数可用作查询字符串参数(通过 request.GET)或作为在URLconf中指定的kwarg变量。默认为 page

paginator_class

paginator类用于分页。缺省情况下,使用 django.core.paginator.Paginator。如果自定义paginator类没有与 django.core.paginator.Paginator 相同的构造函数接口,则还需要为 get_paginator() 提供实现。

context_object_name

指定要在上下文中使用的变量的名称。

get_queryset()

获取此视图的项目列表。这必须是可迭代的,并且可以是查询集(其中将启用查询集特定的行为)。

get_ordering()

返回定义将应用于 queryset 的顺序的字符串(或字符串的可迭代字符串)。

默认情况下返回 ordering

paginate_queryset(queryset, page_size)

返回包含(paginatorpageobject_listis_paginated)的4元组。

构造由分页 querysetpage_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()

一个整数,指定最后一页可以包含的“overflow”对象的数量。默认情况下,这简单地返回 paginate_orphans 的值。

get_allow_empty()

返回一个布尔值,指定如果没有对象可用,是否显示页面。如果此方法返回 False 并且没有对象可用,则视图将引发404而不是显示空页面。默认情况下,这是 True

get_context_object_name(object_list)

返回将用于包含此视图正在操作的数据列表的上下文变量名称。如果 object_list 是Django对象的查询集,并且 context_object_name 未设置,则上下文名称将是该查询集所构成的模型的 model_name,并附加后缀 '_list'。例如,模型 Article 将具有名为 article_list 的上下文对象。

get_context_data(**kwargs)

返回用于显示对象列表的上下文数据。

上下文

  • object_list:此视图正在显示的对象的列表。如果指定了 context_object_name,那么该变量也将在上下文中设置,其值与 object_list 相同。

  • is_paginated:表示结果是否分页的布尔值。具体来说,如果没有指定页面大小,或者可用对象不跨越多个页面,则设置为 False

  • paginatordjango.core.paginator.Paginator 的一个实例。如果页面没有分页,这个上下文变量将是 None

  • page_objdjango.core.paginator.Page 的一个实例。如果页面没有分页,这个上下文变量将是 None

MultipleObjectTemplateResponseMixin

class django.views.generic.list.MultipleObjectTemplateResponseMixin

一个mixin类,用于对在对象实例列表上操作的视图执行基于模板的响应呈现。需要与其混合的视图提供 self.object_list,视图操作的对象实例的列表。 self.object_list 可以是,但不要求是 QuerySet

扩展

方法和属性

template_name_suffix

附加到自动生成的候选模板名称的后缀。默认后缀为 _list

get_template_names()

返回候选模板名称的列表。返回以下列表:

  • 视图上的 template_name 的值(如果提供)

  • <app_label>/<model_name><template_name_suffix>.html