我正在使用 django-cms,并向页面添加一段文本内容(使用标准文本插件)。然后在那段文本上,我进入 html 模式并添加<img src="/foo/bar.png" />
并保存插件并保存页面。
现在,在网站上,我看到了我所做的页面更改,但 img 标记已被删除。
知道为什么会这样吗?我已经尝试过 wymeditor 和 fckeditor 并且两者都发生了。
我正在使用 django-cms,并向页面添加一段文本内容(使用标准文本插件)。然后在那段文本上,我进入 html 模式并添加<img src="/foo/bar.png" />
并保存插件并保存页面。
现在,在网站上,我看到了我所做的页面更改,但 img 标记已被删除。
知道为什么会这样吗?我已经尝试过 wymeditor 和 fckeditor 并且两者都发生了。
我相信在 Django CMS 中,HTML 清理发生在 Django 模板层之前。我查看了我的数据库,发现我的 HTML 中的“”标签正在被清理。
我认为这发生在插件(Django CMS 用于其内容的短语)层。我假设要添加 HTML,您使用的是Text plugin。查看Text 插件模型的方法的来源clean
:
def clean(self):
self.body = clean_html(self.body, full=False)
它调用cms.utils.clean_html
,而后者又用于html5lib
清理 HTML。
解决此问题的一种方法是创建一个自定义插件,该插件继承自Text
插件并重新实现clean
不进行此清理的方法。
在 Django 中,默认情况下,字符串在输出到网页之前会进行清理。我怀疑 Django-CMS 将插件视为未经处理的用户数据,因此 Django 模板系统从插件中删除了 HTML 字符。
Django 模板文档:http ://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs
请注意第一项,自动转义。我怀疑插件正在通过该过滤器运行。
抱歉,我没有更多细节。我不是 Django-CMS 的人。