如何在Django字典中添加HTML标签 添加后无法正常渲染怎么办
问题原因
Django模板默认开启了HTML自动转义机制,目的是避免XSS跨站脚本攻击。你在字典中写入的HTML标签会被自动转义为实体字符,浏览器会将其识别为普通文本而非HTML标签渲染,因此不会出现预期的加粗效果。另外你当前代码里写的是<strong>这类已转义的实体字符,需要先改回原生的<strong>Total</strong>写法,再配合以下任意一种方案即可生效。
解决方法
- 方案1:模板层使用
safe过滤器
在需要输出对应变量的位置添加safe过滤器,明确告知Django该内容是安全的无需转义,示例如下:
<!-- 原写法 --> {{ item.inst }} <!-- 修改后 --> {{ item.inst|safe }}
- 方案2:视图层标记安全字符串
在视图中导入Django内置的mark_safe方法,直接将包含HTML的字符串标记为安全内容,模板无需额外修改,示例如下:
from django.utils.safestring import mark_safe mylist = [{'hq': 'abc', 'inst': mark_safe('<strong>Total</strong>'), 'trade': 'Fitter'}]
- 方案3:模板块级关闭转义
如果有多个变量都不需要转义,可以用autoescape标签包裹对应区域,关闭该范围内的自动转义:
{% autoescape off %} {{ item.inst }} <!-- 其他不需要转义的变量都可以放这里 --> {% endautoescape %}
注意:无论使用哪种方案,都要确保你渲染的HTML内容是完全可控的,不要直接将用户提交的未校验内容标记为安全,否则会存在XSS注入安全风险。
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

