我在Jinja2 API中查找转储:
将整个流转储到文件或类文件对象中。如果要在写入之前编码指定编码,则写入默认的unicode字符串。
我无法找到可以转储回字符串的类文件对象。有没有人知道这方面的解决方法?
编辑:我通常将输出放在一个文件中 - 但在另一个案例中,我将输出附加到电子邮件中。
答案 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
上的循环,将每个块写入文件对象。