57

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

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

我会非常感谢您的回复。提前致谢!

4

3 回答 3

97

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

Context是一个字典,变量名作为,它们的值作为。因此,如果您的上述模板的上下文看起来像:{myvar1: 101, myvar2: 102},当您将此上下文传递给模板渲染方法时,{{ myvar1 }}将在您的模板中替换为101和。这是一个简单的示例,但真正的 Context 对象是呈现模板的上下文。{{ myvar2 }}102

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

上下文处理器的一个用例是您总是想在模板中插入某些变量(例如,用户的位置可能是候选者)。无需编写代码将其插入每个视图,您只需为其编写一个上下文处理器并将其添加TEMPLATE_CONTEXT_PROCESSORSsettings.py.

希望这是有道理的。感谢您上课!

于 2014-01-06T19:53:00.207 回答
18

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

上下文处理器允许您指定在每个上下文中自动设置的许多变量——而无需在每个render()调用中指定变量。

于 2014-01-06T19:40:17.670 回答
3

官方文档Context中对此进行了很好的描述。简而言之:

  1. 在日常使用中,主要是间接的,因为辅助函数Context为您构建

  2. 见 1.:只有在使用低级 api时才需要它

  3. 不,上下文处理器是一个函数,它接受一个请求并返回一个变量字典,然后这些变量在所有使用 a 呈现的模板中都可用RequestContext,例如:

    def get_stuff_from_session(request):
        return {'stuff': request.session['stuff']}
    
于 2014-01-06T19:39:48.673 回答