You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:06