レンダリングするjinja2テンプレート(.htmlファイル)があります(my pyファイルの値でトークンを置き換えてください)。しかし、レンダリングされた結果をブラウザに送るのではなく、新しい.htmlファイルに書きたいと思います。私は、ソリューションはまた、ジャンゴのテンプレートのために似ていると思います。jinja2の出力をブラウザではなくPythonでレンダリングするには
どうすればいいですか?
レンダリングするjinja2テンプレート(.htmlファイル)があります(my pyファイルの値でトークンを置き換えてください)。しかし、レンダリングされた結果をブラウザに送るのではなく、新しい.htmlファイルに書きたいと思います。私は、ソリューションはまた、ジャンゴのテンプレートのために似ていると思います。jinja2の出力をブラウザではなくPythonでレンダリングするには
どうすればいいですか?
どうやってこのようなことができますか?
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('test.html')
output_from_parsed_template = template.render(foo='Hello World!')
print output_from_parsed_template
# to save the results
with open("my_new_file.html", "wb") as fh:
fh.write(output_from_parsed_template)
test.htmlという
<h1>{{ foo }}</h1>
出力
<h1>Hello World!</h1>
あなたがそのようなフラスコのようなフレームワークを使用している場合は、あなたの一番下にこれを行うことができますあなたが戻ってくる前に、見る。
output_from_parsed_template = render_template('test.html', foo="Hello World!")
with open("some_new_file.html", "wb") as f:
f.write(output_from_parsed_template)
return output_from_parsed_template
非常に良いanwser :-) – aychedee
迅速な対応をありがとうございます。 私が正しく理解していた場合、あなたの最初のsnippitへ:Jinja2のインポート環境から 、FileSystemLoader ENV =環境(ローダー= FileSystemLoader( 'テンプレート')) テンプレート= env.get_template( 'test.htmlという') output_from_parsed_template = template.render(foo = 'Hello World!') print output_from_parsed_template 私はある種類のファイル書き込み行で印刷行を置き換えることができました。あれは正しいですか?そのような行をファイルに書き込むとどうなるでしょうか? Re。フラスコ、これは大きなアプリの小さな部分なので、私はフレームワークを使用できるかどうかわかりません。 –
@BillG:上記の編集を参照してください。 – sberry
テンプレートをロードした後、レンダリングを呼び出して出力をファイルに書き込みます。 'with'ステートメントはコンテキストマネージャです。インデントの内側には、 'f'というオブジェクトのような開いたファイルがあります。
template = jinja_environment.get_template('CommentCreate.html')
output = template.render(template_values))
with open('my_new_html_file.html', 'w') as f:
f.write(output)
これは、次のようになります: TEMPLATE_DIR = os.path.join(os.path.dirname(__ file__)、 'templates') jinja_environment = \ jinja2.Environment(autoescape = False、loader = jinja2 .FileSystemLoader(TEMPLATE_DIR)) テンプレート= jinja_environment.get_template( 'CommentCreate.html') self.response.out.write(template.render(template_values)) オープン( 'my_new_html_file.html'、 'W')とf: f.write(response.content) ここで、template_valuesはすでに入力されています。 必要に応じて修正してください。ありがとう。 –
ハングアップ、少し私の答えを編集させてください... – aychedee
説明をありがとう。ついにこれを試してみました。当初私は「このようなファイルやディレクトリはありません: 'my_new_file.html'」というエラーがありました。ファイルはすでに存在している必要があります。私はテンプレートファイルをコピーし、 'my_new_file.html'に名前を変更しました。 IOError:ファイルが書き込み用に開かれていません。これは私がGoogle App Engineで開発しているためでしょうか? –
次のようにして、ファイルにテンプレートストリームをダンプすることができます
Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
参考:sberryとaychedee仕事から上記http://jinja.pocoo.org/docs/dev/api/#jinja2.environment.TemplateStream.dump
それは、pythonic方法です! – sudoz
答え、私は(f.closeを追加する必要がありました)。そうしないと、ディレクトリ内にファイルが見つからないことがあります。
一部のフレームワークでスタンドアロンでjinja2を使用していますか? – sberry