2017-08-29 32 views
0

我在Jinja2 API中查找了dump:JInja模板可以倾倒入字符串吗?

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

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

编辑:我通常把输出放在一个文件中 - 但在另一种情况下,我将输出附加到电子邮件中。

+1

调用'.render()'返回一个字符串。 –

+1

(并且写入字符串的标准python文件类对象称为[StringIO](https://docs.python.org/3/library/io.html#io.StringIO)。) –

+1

模板引擎已生成制作琴弦! – Juggernaut

回答

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,写入每个数据块的文件对象。

+0

谢谢,我缺少file.get_model()作为渲染参数。 –