Wagtail / Hallo.js - 添加插件但不保存修改的内容
Wagtail / Hallo.js - Adding plugins but modified content is not saved
我 运行 使用 Wagtail 1.3.1,Django 1.7.11。
我已经激活了 hallohtml 和 hallojustify 插件,它们出现在工具栏中(没有图标,但按钮在这里)。
可以使用按钮,并且可以在文本区域中看到修改(我的意思是我可以将一个字段居中,例如我看到了)。
当我发布页面时,hallojustify 或 hallohtml 所做的修改不会保存,但我仍然可以使用 bold/italic 按钮并保存内容。看起来 html 已清理...
我应该错过一些东西但是...
@hooks.register('insert_editor_js')
def editor_js():
js_files = [
]
js_includes = format_html_join('\n', '',
((settings.STATIC_URL, filename) for filename in js_files)
)
return js_includes + format_html(
"""
<script>
registerHalloPlugin('hallojustify');
registerHalloPlugin('hallohtml');
</script>
"""
)
根据设计,Wagtail 只允许 HTML 标签和属性的子集,并剔除任何不在其白名单中的内容。这样做有几个原因:它可以防止编辑者插入恶意内容(例如 <script>
标签),并鼓励网站开发人员将内容和表示分开。 (您真的不应该在富文本内容中包含格式信息,例如 left/right/centre 对齐 - 应该在您的模板和 CSS 中定义。)
您可以使用 construct_whitelister_element_rules
hook - however, I'd encourage you to reconsider whether you really need to overload the rich text editor with so much functionality, or whether there's a more structured way of achieving what you want (such as StreamField).
自定义 HTML 白名单规则
我 运行 使用 Wagtail 1.3.1,Django 1.7.11。
我已经激活了 hallohtml 和 hallojustify 插件,它们出现在工具栏中(没有图标,但按钮在这里)。
可以使用按钮,并且可以在文本区域中看到修改(我的意思是我可以将一个字段居中,例如我看到了)。
当我发布页面时,hallojustify 或 hallohtml 所做的修改不会保存,但我仍然可以使用 bold/italic 按钮并保存内容。看起来 html 已清理...
我应该错过一些东西但是...
@hooks.register('insert_editor_js')
def editor_js():
js_files = [
]
js_includes = format_html_join('\n', '',
((settings.STATIC_URL, filename) for filename in js_files)
)
return js_includes + format_html(
"""
<script>
registerHalloPlugin('hallojustify');
registerHalloPlugin('hallohtml');
</script>
"""
)
根据设计,Wagtail 只允许 HTML 标签和属性的子集,并剔除任何不在其白名单中的内容。这样做有几个原因:它可以防止编辑者插入恶意内容(例如 <script>
标签),并鼓励网站开发人员将内容和表示分开。 (您真的不应该在富文本内容中包含格式信息,例如 left/right/centre 对齐 - 应该在您的模板和 CSS 中定义。)
您可以使用 construct_whitelister_element_rules
hook - however, I'd encourage you to reconsider whether you really need to overload the rich text editor with so much functionality, or whether there's a more structured way of achieving what you want (such as StreamField).