如何通过flask消息显示html内容?

nag*_*4ce 20 python flask

据我所知,flash()只需要字符串并在重定向页面中显示.我想通过flash发送html

message = "<h1>Voila! Platform is ready to used</h1>"
flash(message)
return render_template('output.html')
Run Code Online (Sandbox Code Playgroud)

output.html

<div class="flashes">
  {% for message in get_flashed_messages()%}
    {{ message }}
  {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)

但它显示为字符串<h1>Voila! Platform is ready to used</h1>是否有任何方法可以克服这个问题.

the*_*11s 36

使用{{message|safe}}将工作,但也为攻击者向您的页面注入恶意HTML或Javascript打开了大门,也称为XSS攻击.如果您有兴趣,请在此处获取更多信息.

在可能的情况下,更安全的方法是在将字符串传递给模板之前将其包装在Markup对象中:

Python代码:

from flask import Markup

message = Markup("<h1>Voila! Platform is ready to used</h1>")
flash(message)
return render_template('output.html')
Run Code Online (Sandbox Code Playgroud)

Jinja2模板:

<div class="flashes">
  {% for message in get_flashed_messages() %}
    {{ message }}
  {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)


Bur*_*lid 9

使用safe过滤器:

<div class="flashes">
  {% for message in get_flashed_messages()%}
    {{ message|safe }}
  {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)

  • 将 `|safe` 应用于所有闪现的消息是一个*坏主意*:它会使你的代码暴露在潜在的安全漏洞中。不要这样做。 (4认同)
  • 我会避免将转义委托给模板逻辑。 (2认同)