JInja模板可以转储成字符串吗?

时间:2017-08-29 16:50:47

标签: python jinja2

我在Jinja2 API中查找转储:

  

将整个流转储到文件或类文件对象中。如果要在写入之前编码指定编码,则写入默认的unicode字符串。

我无法找到可以转储回字符串的类文件对象。有没有人知道这方面的解决方法?

编辑:我通常将输出放在一个文件中 - 但在另一个案例中,我将输出附加到电子邮件中。

1 个答案:

答案 0 :(得分:1)

我不确定您为什么要查看模板的流API。只需直接渲染模板即可。来自API文档的Basics section

  

要使用一些变量进行渲染,只需调用render()方法:

print template.render(the='variables', go='here')

该方法返回Unicode字符串。来自Template.render() documentation

  

这会将渲染的模板作为unicode字符串返回。

.dump()方法仅适用于由template streams生成的Template.stream() method对象;当你想要的只是一个字符串时,你不应该担心那些。

即便如此,如果你想要一个来自流的字符串,只需加入这些块:

template_stream = template_obj.stream()
rendered = ''.join(template_stream)

最后但并非最不重要的是,如果您仍需要内存中的文件对象,请查看io.StringIO()

import io

fileobj = io.StringIO()
template_stream = template_obj.stream()
template_stream.dump(fileobj)
rendered = fileobj.getvalue()

在内部,.dump()被实现为self上的循环,将每个块写入文件对象。