我想使用Jinja2将模板存储为python中的字符串变量,而不是将其呈现为文件。我将如何去做?
例如,我会使用f弦:
template = f""" This is a {foo}"""
不幸的是,f弦无法满足我的需求,因此我想尝试Jinja2。
编辑: 要求
cars = {
'tesla': {
'cost': '34000',
'length': '185',
'range': '220',
},
'chevy': {
'cost': '37000',
'length': '134',
'range': '238',
}
我想从这本词典中获取值,将其插入模板并存储为字符串以备后用。
我尝试使用下面的代码,但收到无效的语法错误。
template1 = Template("""Tesla
Cost : {{ cars.tesla.cost }}""")
template2 = template1.render()
# Expected Output
print(template2)
Tesla
Cost : 34000
答案 0 :(得分:0)
由于不清楚您的要求是什么,可以通过Template
类使用一种简单的方法来将jinja2模板存储在变量中。 jinja2 docs中的以下示例显示了如何执行此操作:
from jinja2 import Template
template = Template('Hello {{ name }}!')
如果我打印template
,它将显示存储在内存中的Template
对象:
print(template)
#Output
<Template memory:2ea4e10>
您可以将自定义名称传递给render()
并使用name
的值打印模板:
print(template.render(name='John Wick'))
#Output:
Hello John Wick!
稍微复杂一点的模板可以存储在一个简单变量中,然后传递给Template
:
jinja_string = """<title>{{title}}</title>
<ul>
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>"""
template = Template(jinja_string)
users = ["John", "Sam", "Joe"]
print(template.render(title="Users", users=users))
#Output:
<title>Users</title>
<ul>
<li>John</li>
<li>Sam</li>
<li>Joe</li>
</ul>
对于预期的输出模板:
jinja_string = """{{title}}:
{% for car,value in cars.items() %}
Car: {{ car }}
Cost: {{value['cost']}}
Length: {{value['length']}}
Range: {{value['range']}}
{% endfor %}
"""
template = Template(jinja_string)
cars = {
'tesla': {
'cost': '34000',
'length': '185',
'range': '220',
},
'chevy': {
'cost': '37000',
'length': '134',
'range': '238',
}
}
print(template.render(title="Cars", cars=cars))
#Output:
Cars:
Car: tesla
Cost: 34000
Length: 185
Range: 220
Car: chevy
Cost: 37000
Length: 134
Range: 238