2017-08-29 8 views
0

Jinja2 APIでダンプを探しました。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から:

これは、レンダリングされたテンプレートをユニコード文字列として返します。

.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

ありがとうございました。私はrenderの引数としてfile.get_model()が欠けていました。 –

関連する問題