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

Django传递Chart.js标题时撇号转义异常问题求助

解决Chart.js标题中撇号显示为HTML实体的问题

这个问题我之前开发Django+Chart.js项目时也碰到过!核心原因是Django模板默认会自动转义HTML特殊字符(用来防止XSS攻击),所以标题里的撇号(')被转成了HTML实体',Chart.js直接渲染这个实体就会出现异常显示。

下面给你几个实用的解决方案:

方案1:使用Django的safe过滤器(最直接)

在模板里给标题变量加上|safe过滤器,告诉Django这个内容是安全的,不需要转义:

options: {
  title: {
    display: true,
    text: '{{ chart_row.heading_2|safe }}'
  }
}

⚠️ 注意:只有当heading_2的内容是可信来源(比如后台系统生成、管理员输入)时才用这个方法,避免引入XSS风险。

方案2:在视图中用mark_safe标记安全内容

如果你更习惯在后端处理,可以在视图里用mark_safe()函数标记标题为安全内容:

from django.utils.safestring import mark_safe

# 假设你是将chart_row传递给模板上下文
chart_row['heading_2'] = mark_safe(chart_row['heading_2'])

这个方法和方案1原理一致,同样要注意内容的可信性。

方案3:前端解码HTML实体(安全处理用户输入)

如果heading_2是用户输入的内容(不可信),为了兼顾安全和显示效果,建议保留Django的自动转义,然后在前端用JavaScript解码HTML实体:

// 先写一个解码函数
function decodeHtmlEntities(text) {
  const tempElement = document.createElement('textarea');
  tempElement.innerHTML = text;
  return tempElement.value;
}

// 然后在Chart.js配置中使用
options: {
  title: {
    display: true,
    text: decodeHtmlEntities('{{ chart_row.heading_2 }}')
  }
}

这个方法既保留了Django的安全防护,又能让撇号正常显示。

内容的提问来源于stack exchange,提问作者Mark__C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:05:53