Django:哪个上下文属于哪个模板

时间:2009-12-26 16:36:34

标签: django django-templates django-context

我正在使用django自己的测试客户端(在django.test.client中)测试response.context中的属性。

我回来了5 response.context。因为每个模板部分看起来都是一个,因为当我从基础模板中删除嵌套模板部分(例如:{% include "sometemplate.html" %})时,返回的上下文数量会减少。

传递给模板渲染器的变量位于response.context[0].dicts[0]

渲染模板的名称是否存储在某个上下文对象中?

1 个答案:

答案 0 :(得分:2)

没有。上下文(基本上是一个dicts数组)与模板名称一起传递给模板引擎。虽然可以从模板内部设置包含模板名称的上下文值,但这不会自动发生。

在查看django / template / loader_tags.py中的代码时,我注意到class BlockNode在呈现其内容之前执行context.push(),之后执行context.pop()。这将排除在一个块替换内设置值,然后在另一个块替换内使用该值。由于Django模板语言不使用{%with%}标记(有趣的是,与{%block%}标记相同的推送/弹出),因此Django模板语言不直接支持值分配,因此不会出现这种情况。 )。

class IncludeNode子类class Node,但不是class BlockNode,因此在这种情况下似乎没有任何上下文嵌套。