我正在使用django自己的测试客户端(在django.test.client
中)测试response.context中的属性。
我回来了5 response.context
。因为每个模板部分看起来都是一个,因为当我从基础模板中删除嵌套模板部分(例如:{% include "sometemplate.html" %})
时,返回的上下文数量会减少。
传递给模板渲染器的变量位于response.context[0].dicts[0]
渲染模板的名称是否存储在某个上下文对象中?
答案 0 :(得分:2)
没有。上下文(基本上是一个dicts数组)与模板名称一起传递给模板引擎。虽然可以从模板内部设置包含模板名称的上下文值,但这不会自动发生。
在查看django / template / loader_tags.py中的代码时,我注意到class BlockNode
在呈现其内容之前执行context.push()
,之后执行context.pop()
。这将排除在一个块替换内设置值,然后在另一个块替换内使用该值。由于Django模板语言不使用{%with%}标记(有趣的是,与{%block%}标记相同的推送/弹出),因此Django模板语言不直接支持值分配,因此不会出现这种情况。 )。
class IncludeNode
子类class Node
,但不是class BlockNode
,因此在这种情况下似乎没有任何上下文嵌套。