单对象混入

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

    方法和属性*

    • model

      该视图将显示数据的模型。指定 model = Foo 实际上等于指定 queryset = Foo.objects.all(),其中 objects 代表 ``Foo``的 。

    • queryset

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

      警告

      queryset 是一个类属性,它的值是 可变的,所以直接使用它时一定要注意。在使用它之前,要么调用它的 方法,要么用 get_queryset() 检索它,它在幕后负责克隆。

    • slug_field

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

    • slug_url_kwarg

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

    • pk_url_kwarg

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

    • query_pk_and_slug

      如果 True,使 使用主键和 slug 进行查找。默认值为 。

      这个属性可以帮助减轻 不安全的直接对象引用 攻击。当应用程序允许通过顺序主键访问单个对象时,攻击者可以粗暴地强行猜测所有 URL,从而获得应用程序中所有对象的列表。如果应该阻止访问单个对象的用户获得这个列表,将 query_pk_and_slug 设置为 True 将有助于防止URL的猜测,因为每个 URL 需要两个正确的、非顺序的参数。使用唯一的 slug 可以达到同样的目的,但是这个方案允许你使用非唯一的 slug。

    • get_object(queryset=None)

      返回该视图要显示的单个对象。如果提供了 queryset,将使用该查询集作为对象的来源;否则,将使用 。get_object() 在视图的参数中寻找一个 pk_url_kwarg 参数;如果找到这个参数,这个方法就使用这个值执行基于主键的查找。如果没有找到这个参数,则查找 参数,并使用 :attr:`slug_field 执行 slug 查找。

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

    • get_queryset()

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

    • get_context_object_name(obj)

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

    • get_context_data(\*kwargs*)

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

      该方法的基本实现要求视图设置 self.object 属性(即使 None)。如果你在使用这个混入时没有使用内置视图,请务必这样做。

      • object:该视图显示的对象(self.object)。
      • self.object 也将存储在 返回的名称下,默认为模型名称的小写版本。

      上下文变量覆盖了模板上下文处理程序的值

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

    SingleObjectTemplateResponseMixin

    class django.views.generic.detail.``SingleObjectTemplateResponseMixin

    一个混入类,为对单个对象实例进行操作的视图执行基于模板的响应渲染。要求与之混合的视图提供 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