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 }}
'< some text here >'
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)
safe
filter告诉模板引擎不要自动转义字符串(因为你手动转义它或者你确定字符串是安全的).因此,如果用户引入该字符串并且您没有将其转义,则可能会出现安全问题("不要信任用户").
编辑
正如@davidism指出的那样,还有另一种方法 - 推荐的方法 - 将HTML传递给模板:使用Markup
python代码中的对象来包装要传递给模板的html代码.
tags = Markup("<p>some text here</p>")
Run Code Online (Sandbox Code Playgroud)
并在您的模板中,您只使用:
{{ tags }}
Run Code Online (Sandbox Code Playgroud)
这将打印
some text here