2016-06-29 5 views
2

オブジェクトにダンプできるようにしたい。Jinja2オブジェクトにダンプする?

ドキュメントによれば、ファイルやオブジェクトのようなファイルにダンプすることができます。

私はオブジェクトのようなファイルとして何が使えますか?

私はそれを保存したり表示したりしたくありません。そのデータベースに格納されたデータから即座に作成されたルータ用のダウンロード可能な設定テンプレート。

env = Environment(autoescape=False, optimized=False)  

config_file = None 
device_config = None 
device_config = env.from_string(config_template.config) 
device_config.stream(
    STR   = site.location.upper()[:4], 
).dump(config_file) 

理由ビーイングは、私はジャンゴを持つユーザーのブラウザに出力するファイルをコンテンツ処分を使いたいです。

EDIT: はStringIOを

一般に
import StringIO 
>>> config_file = StringIO 
>>> device_config = None 
>>> device_config = env.from_string(config_template.config) 
>>> device_config.stream(
... STR   = site.location.upper()[:4], 
...).dump(config_file) 
Traceback (most recent call last): 
    File "<console>", line 3, in <module> 
    File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 1167, in dump 
    fp.write(item) 
AttributeError: 'module' object has no attribute 'write' 
>>> 

おかげ

+0

動的レポートをレンダリングして、それをあなたのdjangoテンプレートに表示したいですか? HTML + CSSファイルにレンダリングしてサーバーに保存し、django環境に表示するのはなぜですか? –

+1

データベースに保存されたデータからオンザフライで作成されたルータ用のダウンロード可能な設定テンプレートを保存したり表示したりしませんか。 – AlexW

+1

@AlexW:新しいオブジェクトを作るには 'StringIO.StringIO()'を使うべきです。今は 'config_file'が' StringIO'型のオブジェクトではなくモジュールを指しています。 – wildwilhelm

答えて

1

私はjinja2を一度も使用していませんが、StringIOを使用して目的のコンテンツを文字列として取得することができます。あなただけの文字列をしたい場合は、代わりにrender()メソッドを使用する必要がありますように

from StringIO import StringIO 

env = Environment(autoescape=False, optimized=False) 

sio = StringIO() 

device_config = env.from_string(config_template.config) 
device_config.stream(
    STR   = site.location.upper()[:4], 
).dump(sio) 

content = sio.getvalue() 

は、しかし、それが見えます...

以下は動作するはずが、私は(簡単に)それをテストすることはできません。 ..

env = Environment(autoescape=False, optimized=False) 

device_config = env.from_string(config_template.config) 
content = device_config.render(
    STR   = site.location.upper()[:4], 
) 

...しかし、再び簡単にテストすることはできません。

1

でテスト、ファイルのようなオブジェクトは、(一般的にreadおよび/またはwriteを実装することで)何らかの方法でファイルのように振る舞うだけのものです。私はCheck if object is file-like in Pythonに与えられた答えが好きです。

config_fileオブジェクトが文字列型から派生していない型であり、それがwriteメソッドを実装している場合は、あなたのケースでは、十分だと思われます。これを確認するには、jinja2.TemplateStream.dumpのソースで簡単に確認します。

+0

私は理解していません、私はconfig_fileにどのようなタイプを設定すべきですか? – AlexW

+1

'write'を実装している(または' write'メソッドで独自のクラスを定義する)任意の型を使用できます。適切な選択は、あなたがしようとしていることに依存します。まず、[StringIO](https://docs.python.org/2/library/stringio.html)でテストを開始してください。 – wildwilhelm

関連する問題