2017-08-29 80 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()作爲渲染參數。 –