我有一个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
您可以按照以下方式将模板流导出到文件:
Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
参考:https://jinja.palletsprojects.com/en/2.9.x/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)
template = jinja_environment.get_template('CommentCreate.html')
self.response.out.write(template.render(template_values))
with open('my_new_html_file.html', 'w') as f:
f.write(response.content)其中template_values已经被填充。如有需要请进行更正。谢谢。 - Bill G.
)
。 我试图添加它,但是SO要求编辑的字符数>6(愚蠢的限制)... - egeland