[英]Django context variable names for the templates
编辑:我知道我可以更改变量的名称。 我的问题是我不想这样做。 我想知道django自动生成的所有变量是什么。
我正在做Django的入门教程,并且在“ 通用视图”部分中,它在某一点上解释了:
在本教程的前面部分中,已为模板提供了一个上下文,该上下文包含问题和latest_question_list上下文变量。 对于DetailView,将自动提供问题变量–由于我们使用的是Django模型(问题),因此Django能够为上下文变量确定适当的名称。 但是,对于ListView,自动生成的上下文变量是question_list。
我的问题是我不知道Django如何确定这个“适当的名称”。 当我编写自己的模板时,我想知道这一点。 我想知道在此类模板中使用什么上下文变量名称。
据我了解,如果我的模型是Question
,那么question
上下文变量将存储该问题,而question_list
上下文变量将存储每个问题。
所以我的疑问是:我还可以使用其他哪些上下文变量名称? 他们会存储什么? 我似乎在文档中找不到此文件,如果您知道它在哪里,请重定向至它。
我认为此默认上下文变量名称仅在处理Django的基于类的视图时适用。
例如,如果将DetailView用于Animal模型,则Django将自动创建一个名为“ animal”的上下文变量供您在模板中使用。 我认为它也允许使用“对象”。
如您所提到的,另一个示例是Animal模型的ListView,它将生成名为animal_list的上下文名称。
但是,在这两种情况下,都有一些方法可以更改默认上下文变量名称。 如果在DetailView中指定“ context_object_name”,则这将是您在模板中引用的名称。 这也适用于ListViews。
该网站包含所有Django版本的CBV的所有信息:
https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/
您可以使用context_object_name来将question_list更改为其他名称,这在本文档的那一部分中并不能很好地解释,但是...
返回上下文变量名称,该名称将用于包含此视图正在处理的数据列表。 如果object_list是Django对象的查询集,并且未设置context_object_name,则上下文名称将是组成查询集的模型的model_name,并附加后缀'_list'。 例如,模型Article将具有一个名为article_list的上下文对象。
该方法的代码如下所示:应该清除所有疑问:
"""
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.