渲染在 Python 变量中定义的 jinja2 模板

Render jinja2 template defined in Python variable

我正在使用 Jinja2 迈出第一步,我掌握了大部分概念。

对于一个非常微不足道的案例,我尝试在另一个块中渲染子块。

我的简单示例:

from jinja2 import Template

# Trivial template examples
otext=Template("""
--- text ---
""")

odate=Template("""
--- date ---
""")

t=Template("""
======== Hello there {{something}} =========
{% if mytype=='T' %} 
{# === THE TEXT TEMPLATE SHOULD RENDER HERE === #}
{% else %}
{# === THE DATE TEMPLATE SHOULD RENDER HERE === #}
{% endif %}
We can go and {{dowhat}} today.
""")

mydata={
    "something":"JOHN DOE",
    "dowhat":"test this",
    "mytype" :"T"   # choose sub template to run
       }
mytest=t.render(mydata)

print(mytest)

评论在哪里,我想渲染文本(或日期)模板。但我似乎无法找到使用同一 python 脚本中的变量的方法。

完全有可能吗,或者模板“t”的作用域与主脚本不同?

您只需将它们作为主模板渲染的参数传递,因此,在您的情况下,在您的 mydata 字典中:

mydata={
  "something":"JOHN DOE",
  "dowhat":"test this",
  "mytype": "T",
  "odate": odate,
  "otext": otext
}

然后,您可以在模板中渲染它们:

======== Hello there {{something}} =========
{% if mytype=='T' %} 
  {{- otext.render() }}
{% else %}
  {{- odate.render() }}
{% endif %}
We can go and {{dowhat}} today.