我无法将数据设置回我从中获取并存储在数据库中的ckeditor实例?

时间:2015-06-29 09:42:14

标签: javascript html django ckeditor

我有一个Django网络应用程序,它在网页上有各种ck编辑器实例。通过使用模糊事件,我将实例的全部数据保存在数据库中 -

{% for editor in editors %}
   CKEDITOR.appendTo("{{editor.ck_id}}" ,
    {
        on: {
            blur: function(event){
                var data = event.editor.getData();
                console.log("data of {{editor.ck_id}} is " + data);

                var request = $.ajax({
                    url: "/editor/save/",
                    type: "GET",
                    data: {
                        content : data,
                        content_id : "{{editor.ck_id}}"

                    },
                    dataType: "html"
                });
            }
        }

    }
    // "{{editor.data}}"
    );
    CKEDITOR.instances['{{editor.ck_id}}'].insertHtml("{{editor.data}}");

这里ck_id和data是ckeditors的两个数据库字段。现在假设我在ckeditor的一个实例上写这个 -

Tony Stark

当我失去对该实例的关注时,会触发模糊事件,并使用'getData()'来获取该实例的html数据。

<p>Tony Stark</p>

保存到数据库中。现在,当我获取编辑器的数据时,python解释器显示 -

<p>Tony Stark</p>

这很明显。 现在,当我重新启动服务器并再次设置每个ck-editor实例的数据时,会引发此异常 -

Uncaught SyntaxError: Unexpected token ILLEGAL

我知道为什么会这样 - 由于这个原因 -

CKEDITOR.instances['ck_1'].insertHtml("&lt;p&gt;Tony Stark&lt;/p&gt;
");

我从数据库中提取的数据是 -

<p>Tony Stark</p>

它以某种方式转换为上述文本与非法令牌。我试图使用setData()但没有结果。我是否需要对此HTML或其他内容进行编码/解码?

现在我的问题是如何再次将数据重置为我从其中获取并存储在数据库中的ck编辑器实例。我已经在几个论坛上发布了这个问题,但很多人都不知道我在问什么?

这里有没有人试图做同样的事并成功了? 感谢

PS:Adrian Ghiuta解决方案似乎正在发挥作用,但存在问题。当第一次加载编辑器时,谷歌chrome的调试器插入行被视为 -

"<p>Tony Stark</p>"

由于行“{{editor.data | safe}}”而呈现。但是当我将编辑器的内容更改为

Tony

然后在数据库中

<p>Tony</p> 

正在保存,但是当我重新启动服务器时,它不会渲染并抛出此错误

Unexpected ILLEGAL TOKEN

由于这个原因 -

"<p>Tony</p>
" 

这里结尾的双引号是在下一行。但是在初始数据加载期间它是在同一行。这可能导致任何问题? 因为我的chrome控制台在那个位置显示错误。

我会添加一些图像来显示情况。

初始加载 - enter image description here

初始控制台 - enter image description here

编辑后的编辑 -

enter image description here

重新启动服务器并重新加载编辑器后显示错误 -

enter image description here

控制台 - enter image description here

你可以看到在双引号位于下一行的行引发错误。我是否要转义html或什么?

对不起我的天真,但我对HTML没有多少掌握。

0 个答案:

没有答案