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

Jea*_*ane 1 python jinja2

我在 Jinja2 API 中查找了转储:

将完整的流转储到文件或类似文件的对象中。默认情况下,会写入 unicode 字符串,如果您想在写入之前进行编码,请指定编码。

我无法找到可以转储回字符串的类似文件的对象。有谁知道这个问题的解决方法?

编辑:我通常将输出放入文件中 - 但在单独的情况下,我将输出附加到电子邮件中。

Mar*_*ers 5

我不确定您为什么要查看模板的流 API。直接渲染模板即可。来自API 文档的“基础知识”部分:

要使用一些变量来渲染它,只需调用该render()方法:

print template.render(the='variables', go='here')
Run Code Online (Sandbox Code Playgroud)

该方法返回一个 Unicode 字符串。从Template.render()文档中:

这会将呈现的模板作为 unicode 字符串返回。

.dump()方法仅适用于模板流、该Template.stream()方法生成的对象;当您想要的只是一个字符串时,您不需要担心这些。

即便如此,如果您想要来自流的字符串,只需加入块即可:

template_stream = template_obj.stream()
rendered = ''.join(template_stream)
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是,如果您仍然需要内存中的文件对象,那么只需看看io.StringIO()

import io

fileobj = io.StringIO()
template_stream = template_obj.stream()
template_stream.dump(fileobj)
rendered = fileobj.getvalue()
Run Code Online (Sandbox Code Playgroud)

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