2009-12-26 60 views
1

我正在用django自己的测试客户端(在django.test.client)在response.context中测试属性的边缘。我回来了's。因为它似乎为每个模板部分,因为当我删除嵌套模板一部分(例如:{% include "sometemplate.html" %})从基本模板返回上下文的减少量Django:哪个上下文属于哪个模板

的变量传递到模板呈现在response.context[0].dicts[0]

是存储在上下文对象中的呈现模板的名称?

回答

2

否上下文(基本上是一个字符串数组)被传递给模板引擎以及模板的名称虽然可以设置包含来自模板内部的模板名称的上下文值,不会自动发生。

在查看django/template/loader_tags.py中的代码时,我注意到class BlockNode在渲染其内容之前做了context.push(),之后做了context.pop()。这会阻止在一个块替换中设置值,然后在另一个块替换中使用该值。由于Django模板语言除了使用{%with%}标签之外并不直接支持赋值赋值,(这有趣的是,与{%block%}标签具有相同的push/pop功能)。

class IncludeNode子类class Node,但不是class BlockNode所以在这种情况下看起来没有任何上下文的嵌套。

+0

彼得,thanx的阐述。出于测试的目的,我只会得到第一个上下文并处理它。我用它来查看变量是否被视图方法填充。而且,imho更好的编码,然后在呈现的响应上做一个assertContains。再次感谢! – GerardJP 2009-12-27 11:20:17