Skip to main content

单个对象混合

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

提供用于查找与当前HTTP请求相关联的对象的机制。

方法和属性

model

此视图将显示数据的模型。指定 model = Foo 与指定 queryset = Foo.objects.all() 实际上相同,其中 objects 表示 Foo默认管理器

queryset

表示对象的 QuerySet。如果提供,queryset 的值将取代为 model 提供的值。

警告

queryset 是具有 mutable 值的类属性,因此在直接使用它时必须小心。在使用它之前,要么调用其 all() 方法,要么使用 get_queryset() 检索它,后者会在后台进行克隆。

slug_field

包含块的模型上的字段的名称。默认情况下,slug_field'slug'

slug_url_kwarg

包含slug的URLConf关键字参数的名称。默认情况下,slug_url_kwarg'slug'

pk_url_kwarg

包含主键的URLConf关键字参数的名称。默认情况下,pk_url_kwarg'pk'

context_object_name

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

query_pk_and_slug

如果 True,使 get_object() 使用主键和子程序执行查找。默认为 False

此属性可以帮助减轻 insecure direct object reference 攻击。当应用程序允许通过顺序主键访问单个对象时,攻击者可以暴力猜测所有URL;从而获得应用程序中的所有对象的列表。如果应该阻止访问单个对象的用户获取此列表,将 query_pk_and_slug 设置为 True 将有助于防止猜测URL,因为每个URL都需要两个正确的非连续参数。简单地使用独特的lug lug可能有相同的目的,但这种方案允许你有非独特的。。。

get_object(queryset=None)

返回此视图将显示的单个对象。如果提供 queryset,那么该查询集将用作对象的来源;否则将使用 get_queryset()get_object() 在视图的参数中查找 pk_url_kwarg 参数;如果找到此参数,则此方法使用该值执行基于主键的查找。如果找不到此参数,它将查找 slug_url_kwarg 参数,并使用 slug_field 执行slug查找。

query_pk_and_slugTrue 时,get_object() 将使用主键和子程序执行其查找。

get_queryset()

返回将用于检索此视图将显示的对象的查询集。默认情况下,get_queryset() 返回 queryset 属性的值,如果它被设置,否则它通过调用 model 属性的默认管理器上的 all() 方法构造一个 QuerySet

get_context_object_name(obj)

返回将用于包含此视图正在操作的数据的上下文变量名称。如果没有设置 context_object_name,则上下文名称将从构成查询集的模型的 model_name 构造。例如,模型 Article 将具有名为 'article' 的上下文对象。

get_context_data(**kwargs)

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

此方法的基本实现要求 self.object 属性由视图设置(即使 None)。一定要这样做,如果你使用这个mixin没有一个内置的视图,这样做。

它返回一个带有这些内容的字典:

  • object:此视图正在显示的对象(self.object)。

  • context_object_nameself.object 也将存储在 get_context_object_name() 返回的名称下,默认为模型名称的小写版本。

上下文变量覆盖模板上下文处理器中的值

来自 get_context_data() 的任何变量优先于来自 上下文处理器 的上下文变量。例如,如果您的视图将 model 属性设置为 User,则 user 的默认上下文对象名称将覆盖 django.contrib.auth.context_processors.auth() 上下文处理器中的 user 变量。使用 get_context_object_name() 避免冲突。

get_slug_field()

返回要用于通过slug查找的slug字段的名称。默认情况下,这简单地返回 slug_field 的值。

SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

一个mixin类,对单个对象实例操作的视图执行基于模板的响应呈现。需要与其混合的视图提供 self.object,视图操作的对象实例。 self.object 通常是,但不一定是,Django模型的一个实例。如果视图正在构建新实例的过程中,它可能是 None

扩展

方法和属性

template_name_field

当前对象实例上的字段,可用于确定候选模板的名称。如果 template_name_field 本身或当前对象实例上的 template_name_field 的值是 None,则该对象将不用于候选模板名称。

template_name_suffix

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

get_template_names()

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

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

  • 视图正在操作的对象实例上的 template_name_field 字段的内容(如果可用)

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