Flask中如何将双空格替换为<br>标签并正确渲染HTML
解决Flask中HTML标签被当作纯文本显示的问题
问题核心是Jinja2模板引擎默认会自动转义HTML内容(防范XSS攻击),所以你直接替换生成的<br>会被转成<br>,最终以纯文本形式展示。下面提供两种可行的解决方式:
方法一:后端处理+模板safe过滤器
- 修改Python代码,先将信息中的双空格替换为
<br>:
from datetime import date kalender = Kalender.query.order_by(Kalender.datum).all() for k in kalender: if k.datum < date.today(): db.session.delete(k) db.session.commit() # 新增双空格替换逻辑 k.info = k.info.replace(' ', '<br>')
- 在HTML模板中,给
arr.info加上safe过滤器,告知Jinja2该内容无需转义:
{% for arr in kalender %} <p>{{ arr.info|safe }}</p> {% endfor %}
方法二:模板内直接处理
无需修改后端代码,直接在模板中完成替换并标记内容安全:
{% for arr in kalender %} <p>{{ arr.info|replace(' ', '<br>')|safe }}</p> {% endfor %}
安全提示
如果info字段内容来自用户输入,直接使用safe过滤器存在XSS攻击风险。建议先对原始内容做HTML转义,再替换双空格:
from markupsafe import escape # 先转义恶意内容,再处理换行 k.info = escape(k.info).replace(' ', '<br>')
这种方式既能实现换行效果,又能避免恶意HTML代码被执行。
内容的提问来源于stack exchange,提问作者Aron Fredriksson
相关产品推荐
相关产品推荐

