1

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

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

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

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

4

1 回答 1

2

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

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

class IncludeNodesubclasses class Node,但不是class BlockNode这样,在这种情况下似乎没有任何上下文嵌套。

于 2009-12-26T17:20:17.567 回答