如何解决自定义Django标签输出被HTML实体转义的问题?
解决Django自定义标签输出双引号被转义的问题
Django模板默认会自动转义HTML特殊字符,你给参数加safe过滤器没用,因为问题出在自定义标签的输出本身,不是传入的参数。解决这个问题有两种直接的方式:
用
mark_safe()包裹返回内容
这是最常用的方法,你需要先导入Django提供的mark_safe工具函数,然后把自定义标签生成的JavaScript代码用它包裹后返回。这样Django会认定这段内容是安全的,不会自动转义其中的双引号等特殊字符。示例代码:
from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def load_vue_components(): # 生成你需要的JS代码(包含Axios请求和组件加载逻辑) js_content = ''' axios.get("/vue-templates/FirstComponent.html") .then(res => { const app = Vue.createApp({ template: res.data }); app.mount("#app"); }); ''' # 关键:用mark_safe包裹后返回 return mark_safe(js_content)如果是基于
template.Node的标签
要是你的自定义标签是通过继承template.Node实现的,那在render方法里返回内容时,同样用mark_safe()处理输出结果即可。
注意:只有当你完全控制生成的内容(确保没有用户输入的不可信内容)时,才使用
mark_safe(),避免引入XSS安全风险。
内容的提问来源于stack exchange,提问作者Edward Severinsen
相关产品推荐
相关产品推荐

