Jinja2模板中的“eval”语句

时间:2017-12-12 09:41:05

标签: python smarty jinja2

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

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

Jinja2中是否有eval个等价物?或者这个案例有什么好的解决方法?

2 个答案:

答案 0 :(得分:1)

使用@jinja2.contextfilter装饰器为渲染变量制作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 }}

答案 1 :(得分:1)

我正在寻找一个类似的eval用例并碰到一个不同的堆栈溢出帖子。

这对我有用

<强> 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