单个对象混合物

SingleObjectMixin

django.views.generic.detail。 SingleObjectMixin T0> ¶ T1>

提供一种查找与当前HTTP 请求关联的对象的机制。

方法和属性

model

视图要显示的模型。 指定model = Foo 效果等同于指定queryset = Foo.objects.all(),其中Foo 表示objectsdefault manager

queryset

表示对象的一个QuerySet 如果提供,queryset 的值优先于model 的值。

警告

queryset 是一个具有可变值的类属性,所以直接使用它的时候必须小心。 在使用它之前,要么调用它的all() 方法要么使用get_queryset() 来获取它,这些方法会注意隐藏地克隆。

slug_field

模型中包含slug 的字段。 'slug' 默认为slug_field

slug_url_kwarg T0> ¶ T1>

URLConf 中包含slug 关键字参数的名称。 'slug' 默认为slug_url_kwarg

pk_url_kwarg

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

context_object_name T0> ¶ T1>

指定在context中使用的变量的名称。

query_pk_and_slug T0> ¶ T1>

如果True,则会导致get_object()使用主键和slug执行查找。 默认为False

此属性可以帮助缓解不安全的直接对象引用攻击。 当应用程序允许通过顺序主键访问单个对象时,攻击者可能会强制猜测所有URL;从而获得应用程序中所有对象的列表。 如果应该阻止访问单个对象的用户获取此列表,将True设置为query_pk_and_slug将有助于防止猜测URL,因为每个URL都需要两个正确的,顺序参数。 简单地使用独特的slug可能有相同的目的,但这种方案允许你有非独特的slug。

get_object(queryset=None)

返回该视图要显示的对象。 如果提供了queryset,该查询将被用作对象的源;否则将使用get_queryset() get_object()在视图的参数中查找一个pk_url_kwarg参数;如果找到此参数,此方法将使用该值执行基于主键的查找。 如果这个参数没有找到,该方法查找slug_url_kwarg参数,使用slug_field字段执行针对slug的查询。

query_pk_and_slugget_object()时,True将使用主键和slug执行查找。

get_queryset T0>()¶ T1>

返回用来获取本视图显示对象的queryset。 默认的,如果设置了queryset属性,get_queryset()返回它的值,否则该方法构造一个QuerySet通过调用model属性的默认管理器的all()方法。

get_context_object_name T0>( OBJ T1>)¶ T2>

返回视图用来操作的上下文对象的名称。 如果context_object_name没有被设置,上下文对象的名字将被设置为构成queryset的模型的model_name 比如,'article'模型的上下文对象名字是Article

get_context_data T0>( ** kwargs T1>)¶ T2>

返回显示对象的上下文数据。

该方法的基本实现要求视图中设置self.object属性(即使None)。 如果在使用这个mixin的时候请确认没有其他的内建视图也执行了该方法。

它返回一个包含这些内容的字典:

  • object:该视图显示的对象(self.object)。
  • context_object_nameself.object也将以get_context_object_name()返回的名称存储,该名称默认为型号名称的较低版本。

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

来自get_context_data()的任何变量优先于来自context processors的上下文变量。 For example, if your view sets the model attribute to User, the default context object name of user would override the user variable from the django.contrib.auth.context_processors.auth() context processor. 使用get_context_object_name()来避免冲突。

get_slug_field T0>()¶ T1>

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

SingleObjectTemplateResponseMixin

django.views.generic.detail。 SingleObjectTemplateResponseMixin T0> ¶ T1>

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

扩展

方法和属性

template_name_field T0> ¶ T1>

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

template_name_suffix T0> ¶ T1>

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

get_template_names T0>()¶ T1>

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

  • 视图上的template_name值(如果提供)
  • 视图正在操作的对象实例上的template_name_field字段的内容(如果可用)
  • <app_label>/<model_name><template_name_suffix>.html