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