簡體   English   中英

如何將Jinja2模板輸出存儲為字符串

[英]How to store Jinja2 template output as a string

我想使用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

由於尚不清楚您的要求是什么,可以通過Template類提供一種將jinja2模板存儲在變量中的簡單方法。 jinja2文檔中的以下示例顯示了如何執行此操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM