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

Django项目中CKEditor setData()显示原始HTML,如何转为富文本?

解决CKEditor调用setData()时显示原始HTML的问题

看起来你现在的问题是调用setData()时传入的是转义后的HTML字符串(比如带<、>这类实体),导致CKEditor显示的是原始标签文本而不是渲染后的富文本。我来给你拆解下解决方法:

1. 先修正模板渲染的问题

你当前的代码是:

CKEDITOR.instances.editor1.setData( "<%- data.description %>" );

这里的&lt;和&gt;把模板标签<%- %>也转义了,导致模板引擎根本没解析data.description,直接把字符串"<%- data.description %>"传给了CKEditor。

如果你的前端用的是EJS/Underscore这类支持<%- %>(不转义输出)的模板引擎,正确的写法应该是直接让模板输出原始的data.description内容:

CKEDITOR.instances.editor1.setData( '<%- data.description %>' );

用单引号包裹模板标签,这样<%- %>会直接输出data.description里的原始HTML,而不是转义后的实体,CKEditor拿到正常的HTML后就会自动渲染成富文本。

如果是Django模板(因为你提到是Django项目),那应该用safe过滤器来避免Django自动转义HTML:

CKEDITOR.instances.editor1.setData( '{{ data.description|safe }}' );

2. 如果内容本身已经被转义了,需要先解码

如果你的data.description在后端存储的时候就已经是转义后的HTML(比如存的是&lt;p&gt;xxx&lt;/p&gt;而不是<p>xxx</p>),那光靠模板渲染还不够,需要在前端先把HTML实体解码成原始HTML。可以写一个简单的解码函数:

function decodeHtml(str) {
  const textarea = document.createElement('textarea');
  textarea.innerHTML = str;
  return textarea.value;
}

然后这样调用:

// 先解码模板输出的转义内容,再传给setData
const decodedHtml = decodeHtml('<%= data.description %>'); // 注意这里用<%= %>因为内容已经转义了
CKEDITOR.instances.editor1.setData(decodedHtml);

3. 确保CKEditor允许解析这些HTML标签

最后还要检查下CKEditor的配置,默认情况下它会过滤一些HTML标签。如果你的内容里有自定义标签或者特殊格式,需要把allowedContent设为true(允许所有内容),或者配置具体允许的标签:

CKEDITOR.replace('editor1', {
  allowedContent: true,
  // 其他配置...
});

这样调整后,调用setData()时传入的HTML就能被CKEditor正确渲染成富文本了。

内容的提问来源于stack exchange,提问作者Sai Avinash Duddupudi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:43:11