从变量渲染HTML标记而不转义

OMG*_*der 4 python jinja2 flask

我有一些HTML内容,我想传递给模板进行渲染.但是,它会使标记转义为使用HTML实体(<),因此它们显示为代码而不是标记.如何渲染传递给模板的html?

tags = """<p>some text here</p>"""
render_template ('index.html',tags=tags)
Run Code Online (Sandbox Code Playgroud)
{{ tags }}
'&lt; some text here &gt;'
Run Code Online (Sandbox Code Playgroud)

我想要一个带有文字的段落.

some text here
Run Code Online (Sandbox Code Playgroud)

dor*_*oru 11

使用jinja2 safe过滤器:

{{ tags | safe }}
Run Code Online (Sandbox Code Playgroud)

safefilter告诉模板引擎不要自动转义字符串(因为你手动转义它或者你确定字符串是安全的).因此,如果用户引入该字符串并且您没有将其转义,则可能会出现安全问题("不要信任用户").

编辑

正如@davidism指出的那样,还有另一种方法 - 推荐的方法 - 将HTML传递给模板:使用Markuppython代码中的对象来包装要传递给模板的html代码.

tags = Markup("<p>some text here</p>")
Run Code Online (Sandbox Code Playgroud)

并在您的模板中,您只使用:

{{ tags }}
Run Code Online (Sandbox Code Playgroud)

这将打印

some text here