レンダリングしたいjinja2テンプレート(.htmlファイル)があります(トークンをpyファイルの値に置き換えます)。ただし、レンダリングされた結果をブラウザーに送信する代わりに、新しい.htmlファイルに書き込みたいと思います。解決策はdjangoテンプレートでも同様だと思います。
これどうやってするの?
回答:
このようなものはどうですか?
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", "w") as fh:
fh.write(output_from_parsed_template)
test.html
<h1>{{ foo }}</h1>
出力
<h1>Hello World!</h1>
Flaskなどのフレームワークを使用している場合は、戻る前に、ビューの下部でこれを行うことができます。
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
rb
を試してください:に変更されましたwb
。
)
下部のコードセクションの最初の行の終わりに欠落があります。私はそれを追加しようとしていたが、SOは...> 6つの文字(愚かな制限)する編集を要求する
次のように、テンプレートストリームをファイルにダンプできます。
Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
参照:http://jinja.pocoo.org/docs/dev/api/#jinja2.environment.TemplateStream.dump
したがって、テンプレートをロードした後、renderを呼び出して、出力をファイルに書き込みます。'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)