模板的 Django 上下文变量名称
Posted
技术标签:
【中文标题】模板的 Django 上下文变量名称【英文标题】:Django context variable names for the templates 【发布时间】:2017-01-29 10:24:30 【问题描述】:编辑: 我知道我可以更改变量的名称。我的问题是在我不想这样做的情况下。我想知道django自动生成的所有变量是什么。
我正在做 Django 的入门教程,我在 generic views section 上,有一次它解释了:
在教程的前面部分中,已经提供了模板 具有包含问题和 latest_question_list 的上下文 上下文变量。对于 DetailView,提供了 question 变量 自动——因为我们使用的是 Django 模型(问题),所以 Django 是 能够确定上下文变量的适当名称。 但是,对于 ListView,自动生成的上下文变量是 问题列表。
我的问题是我不知道 Django 如何确定这个“适当的名称”。当我编写自己的模板时,我想知道这一点。我想知道在这样的模板中使用什么上下文变量名称。
据我所知,如果我的模型是Question
,则question
上下文变量将存储该问题,而question_list
上下文变量将存储每个问题。
所以我的疑问是:我还可以使用哪些其他上下文变量名称?他们会存储什么?我似乎在文档中找不到这个,如果你知道它在哪里,请把我重定向到它。
【问题讨论】:
仅供参考,您可以自己设置上下文模板变量,将context_object_name = 'yourname'
设置为视图属性。
是的,我知道我可以自己设置这些名称。我的问题是我不想设置这些名称。我想知道django自动生成的变量是什么
【参考方案1】:
我认为这个默认的上下文变量名只适用于处理 Django 的基于类的视图。
例如如果你为 Animal 模型使用 DetailView,Django 将自动创建一个名为“animal”的上下文变量供你在模板中使用。我认为它也允许使用“对象”。
另一个例子是,正如您所提到的,Animal 模型的 ListView 将生成名为 animal_list 的上下文名称。
但是,在这两种情况下,都有一些方法可以更改默认上下文变量名称。如果您在 DetailView 中指定“context_object_name”,这将是您在模板中引用的名称。这也适用于 ListView。
该网站包含所有 Django 版本的 CBV 的所有信息:
https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/
【讨论】:
【参考方案2】:您可以使用 context_object_name 将 question_list 更改为其他内容,这在文档的那部分没有很好地解释,但是...
返回将用于包含列表的上下文变量名称 此视图正在处理的数据。如果 object_list 是一个查询集 Django 对象和 context_object_name 未设置,上下文名称 将是组成查询集的模型的模型名称 来自,附加后缀“_list”。例如,模型文章 会有一个名为 article_list 的上下文对象。
在get_context_object_name方法下给出
这就是那个方法的code的样子,应该能解开所有疑惑:
"""
Get the name of the item to be used in the context.
"""
if self.context_object_name:
return self.context_object_name
elif hasattr(object_list, 'model'):
return '%s_list' % object_list.model._meta.model_name
else:
return None
【讨论】:
我认为每个通用视图都会生成多个上下文变量。 code 提供了帮助。谢谢 很高兴能帮上忙以上是关于模板的 Django 上下文变量名称的主要内容,如果未能解决你的问题,请参考以下文章