Django模板的上下文变量名称

时间:2016-09-21 09:00:54

标签: python django django-templates django-class-based-views

编辑: 我知道我可以改变变量的名称。我的问题是,我不想那样做。我想知道django自动生成的所有变量是什么。

我正在做Django的入门教程,而我正在generic views section,它解释了一下:

  

在本教程的前几部分中,提供了模板   使用包含问题和latest_question_list的上下文   上下文变量。对于DetailView,提供了问题变量   自动 - 因为我们正在使用Django模型(问题),Django是   能够确定上下文变量的适当名称。   但是,对于ListView,自动生成的上下文变量是   question_list。

我的问题是我不知道Django如何确定这个“合适的名字”。当我编写自己的模板时,我想知道这一点。我想知道在这样的模板中使用什么上下文变量名。

根据我的理解,如果我的模型是Questionquestion上下文变量将存储该问题,question_list上下文变量将存储每个问题。

所以我的疑问是:我可以使用哪些其他上下文变量名称?他们会储存什么?我似乎无法在文档中找到这个,如果您知道它在哪里,请将其重定向到我。

2 个答案:

答案 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的上下文对象。

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