编辑: 我知道我可以改变变量的名称。我的问题是,我不想那样做。我想知道django自动生成的所有变量是什么。
我正在做Django的入门教程,而我正在generic views section,它解释了一下:
在本教程的前几部分中,提供了模板 使用包含问题和latest_question_list的上下文 上下文变量。对于DetailView,提供了问题变量 自动 - 因为我们正在使用Django模型(问题),Django是 能够确定上下文变量的适当名称。 但是,对于ListView,自动生成的上下文变量是 question_list。
我的问题是我不知道Django如何确定这个“合适的名字”。当我编写自己的模板时,我想知道这一点。我想知道在这样的模板中使用什么上下文变量名。
根据我的理解,如果我的模型是Question
,question
上下文变量将存储该问题,question_list
上下文变量将存储每个问题。
所以我的疑问是:我可以使用哪些其他上下文变量名称?他们会储存什么?我似乎无法在文档中找到这个,如果您知道它在哪里,请将其重定向到我。
答案 0 :(得分:1)
我认为这个默认的上下文变量名只适用于处理Django的基于类的视图。
E.g。如果您使用DetailView作为Animal模型,Django将自动创建一个名为“animal”的上下文变量,供您在模板中使用。我认为它也允许使用'对象'。
另一个例子是,正如您所提到的,动物模型的ListView将生成名为animal_list的上下文名称。
但是,在这两种情况下,都有办法更改默认的上下文变量名称。如果在DetailView中指定“context_object_name”,则这将是您在模板中引用的名称。这也适用于ListViews。
本网站提供所有Django版本CBV的所有信息:
https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/
答案 1 :(得分:1)
您可以使用context_object_name将question_list更改为其他内容,但在文档的该部分中没有详细说明,但是......
下提供返回将用于包含列表的上下文变量名称 此视图正在操作的数据。如果object_list是一个查询集 没有设置Django对象和context_object_name,即上下文名称 将是组成查询集的模型的model_name from,附加了postfix'_list'。例如,模型文章 会有一个名为article_list的上下文对象。
这就是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