Django 1.8.2 文档

单个对象的Mixin

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

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

方法和属性

model

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

queryset

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

警告

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

slug_field

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

slug_url_kwarg

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

pk_url_kwarg

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

context_object_name

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

query_pk_and_slug
New in Django 1.8.

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

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

get_object(queryset=None)

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

Changed in Django 1.8:

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

get_queryset()

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

get_context_object_name(obj)

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

get_context_data(**kwargs)

返回context数据以展示objects

这个方法的基本实现需要object属性被视图赋值(即使是None)。如果在使用这个mixin的时候请确认没有其他的内建视图也执行了该方法。

get_slug_field()

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

上下文

  • object:视图正在显示的对象。如果指定context_object_name,它也将Context 中设置并具有和 object 相同的值。

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