Django中的上下文是什么?

时间:2014-01-06 19:08:53

标签: django django-templates django-context

我是django初学者,所以我试图理解上下文和上下文处理器的概念。

  • 什么是背景,为什么要使用它?
  • 上下文是您在模板中使用时需要的值吗?
  • 上下文和上下文处理器是否相同?

我会很反应你的回应。提前谢谢!

3 个答案:

答案 0 :(得分:60)

当您使用Django模板时,它会被编译一次(并且只编译一次)并存储以供将来使用,作为优化。模板可以在双花括号中具有变量名称,例如 {{ myvar1 }}{{ myvar2 }}

Context是一个字典,其变量名称为,其值为。因此,如果上述模板的上下文如下所示:{myvar1: 101, myvar2: 102},当您将此上下文传递给模板呈现方法时,{{ myvar1 }}将替换为101{{ myvar2 }}模板中的102。这是一个简单的示例,但实际上Context对象是正在呈现模板的 context

对于ContextProcessor,这是一个稍微高级的概念。您可以在settings.py文件中列出一些上下文处理器,它们接收一个HttpRequest对象并返回一个字典(类似于上面的Context对象)。上下文处理器返回的字典(上下文)被合并到Django由您(用户)传入的上下文中。

上下文处理器的用例是当您总是希望在模板中插入某些变量时(例如,用户的位置可能是候选者)。您可以简单地为其编写上下文处理器,并将其添加到TEMPLATE_CONTEXT_PROCESSORS中的settings.py设置中,而不是编写代码以在每个视图中插入代码。

希望这是有道理的。谢谢参加课程!

答案 1 :(得分:12)

上下文变量名称 - >传递给模板的变量值映射。

上下文处理器允许您自动指定在每个上下文中设置的多个变量 - 无需在每个 render()<中指定变量/ strong>致电。

答案 2 :(得分:1)

the official documentation中很好地描述了Context。简而言之:

  1. 在日常使用中,主要是间接使用,因为helper functions为您构建Context

  2. 参见1:如果您使用the low-level api

  3. ,则只需要它
  4. 不,context processor是一个接收请求并返回变量字典的函数,然后在所有使用RequestContext呈现的模板中可用,例如:

    def get_stuff_from_session(request):
        return {'stuff': request.session['stuff']}