2009-12-26 59 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