如何在Django中使用render_to_response渲染后比较字符串?

时间:2015-05-25 13:18:56

标签: python django templates render

我想重构与Django编写的HTML相关的许多模板文件。 这些文件很乱,包含“复制和粘贴”。 由于我们的项目将会很长,所以应退回这份“技术债务”。

因此,我想在重构之前和之后编写测试。

我只想比较这些渲染,这里不需要上下文,因为有许多模板文件,因此为测试创建上下文让我厌烦。 所以我创建了上下文,它始终将“Hoge”作为虚拟返回,并且在shell上运行良好。

class X(Context):
   def __getitem__(self, key):
       return "Hoge"

t = Template("b{{ m }}a")
t.render(X()) #-> bHogea

但是当我在与test相关的文件中使用类似的方法(render_to_string)时,它会发出“VariableDoesNotExist”异常。 当然,在shell上,“render_to_string”效果很好。

似乎“django.template.base.Variable._resolve_lookup”出现异常,我分配方法,将前一个Context“X()”返回给_resolve_lookup。如下所示。

Variable._resolve_lookup = lambda him, context: X()

( - 我知道这种方式非常糟糕,但我的目的只是测试比较效果图) 但是,在此之后,很快就会出现以下异常。

django.core.urlresolvers.NoReverseMatch: Reverse for 'xxx_list' with arguments '()' and keyword arguments

我也知道这些例外发生在模板文件中,需要Django的一些响应。

然后我在这里听到了。 我该怎么办? 我应该尝试逐步测试吗?

0 个答案:

没有答案