"eval" Jinja2 模板中的语句

"eval" statement in Jinja2 template

我正在尝试将一些旧的 Smarty 模板转换为 Jinja2。

Smarty 在模板中使用 eval 语句从当前上下文呈现模板化字符串。

Jinja2 中有 eval 等价物吗?或者对于这种情况有什么好的解决方法?

使用 @jinja2.contextfilter decorator to make a Custom Filter 渲染变量:

from jinja2 import contextfilter, Template
from markupsafe import Markup


@contextfilter
def dangerous_render(context, value):
    return Markup(Template(value).render(context)).render()

然后在您的 template.html 文件中:

{{ myvar|dangerous_render }}

我正在寻找类似的 eval 用例,但遇到了不同的堆栈溢出 post。

这对我有用

routes.py

def index():
    html = "<b>actual eval string</b>"
    return render_template('index.html', html_str = html)

index.html

<html>
    <head>
        <title>eval jinja</title>
    </head>
    <body>
        {{ html_str | safe }}
    </body>
</html>

参考 : Passing HTML to template using Flask/Jinja2