不能。Superset 图表渲染层不执行HTML,仅支持sub、sup、strong、em等白名单标签及HTML实体,如"CO<sub>2</sub>"渲染为CO₂。

Superset 里能直接写 HTML 控制图表样式吗?
不能。Superset 的图表(chart)渲染层不执行用户传入的 HTML 字符串,html 标签会被自动转义或过滤——这是安全机制,不是 bug。
你看到的“HTML 自定义”通常指三类场景:仪表板文本框里的富文本、自定义 CSS 注入、或通过前端插件扩展图表;但原生 chart 配置项(比如 custom_css、js_tooltip)都不接受可执行 HTML。
怎么让 Superset 图表显示带格式的文字(比如上标、单位)?
靠 Superset 支持的有限富文本语法 + 后端预处理。它在部分字段(如图例名、坐标轴标签、tooltip 模板)中解析少量 HTML 实体和内联样式,但仅限白名单标签:sub、sup、strong、em,且不支持 style 属性或 JS。
- ✅ 正确写法:
"CO<sub>2</sub> emissions"→ 渲染为 CO₂ - ✅ 可用:
"value: <sup>*",但<span style="color:red">*会被原样显示或丢弃 - ❌ 错误尝试:
<script>alert(1)</script>、<div class="xxx">、<img src="x">全部失效 - ⚠️ 注意:字段是否支持这些标签取决于图表类型和 Superset 版本(v2.1+ 对
sup/sub支持更稳,v1.x 多数忽略)
想彻底控制图表 DOM 结构或加交互,该从哪下手?
得改前端代码,不是配个 JSON 就能搞定的事。Superset 的图表由 ECharts / Deck.gl / NVD3 等底层库渲染,自定义入口只有两个:
立即学习“前端免费学习笔记(深入)”;
- 用
custom_css字段注入全局 CSS(仅限仪表板级别),例如:svg .axis text { font-size: 12px; } .label sup { font-size: 8px; } - 开发自定义 viz 插件:重写
transformProps和renderChart,把原始数据加工成带<sup>的字符串再喂给 ECharts 的formatter回调(比如 tooltip 中的params[0].name) - ⚠️ 关键限制:Superset 不允许在 viz 插件里动态执行字符串形式的 HTML;所有 DOM 操作必须走 React 组件生命周期或 ECharts 的 API(如
setOption的tooltip.formatter) - ⚠️ 兼容性风险:自定义插件需随 Superset 升级同步维护,v2.0 到 v3.0 的 viz SDK 接口变动很大
为什么改了 SQL 或模板还是看不到上标?
常见卡点不在前端,而在数据层或缓存。Superset 对字符串字段默认做 HTML 转义,尤其当字段来自 SQL 查询结果时:
- ❌ 错误做法:SQL 里写
CONCAT('CO', '<sub>2</sub>')→ 返回的是纯文本CO<sub>2</sub>,前端不会解析 - ✅ 正确做法:SQL 返回结构化字段(如
co2_value,unit),在 viz 配置的tooltip或y_axis_label中手动拼接:"CO<sub>2</sub> ({{ metric }})" - ? 缓存陷阱:改完配置后没点「刷新元数据」或清掉浏览器缓存,旧的转义结果还在内存里
- ? 验证方法:打开浏览器开发者工具,查 network 请求返回的
json数据里字段值是不是已含<sub>标签;如果没出现,说明问题出在数据源或模板逻辑
真正可控的 HTML 渲染只发生在仪表板文本块里;图表本身是个黑盒,能塞进去的只有它认的那几个标签和 CSS 规则。别指望靠改个配置项就实现任意 HTML 效果——那是前端工程的事,不是 Superset 的职责边界。











