Flask 实战:28、使用Flask-CKEditor集成富文本编辑器
资源编号:75879 Python Web Flask Web开发实战:入门、进阶与原理解析 热度:88
富文本编辑器即WYSIWYG(What You See Is What You Get,所见即所得)编辑器,类似于我们经常使用的文本编辑软件。它提供一系列按钮和下拉列表来为文本设置格式,编辑状态的文本样式即最终呈现出来的样式。在Web程序中,这种编辑器也称为HTML富文本编辑器,因为它使用HTML标签来为文本定义样式。
`。Flask-CKEditor通过包装WTForms提供的TextAreaField字段类型实现了一个CKEditorField字段类,我们使用它来构建富文本编辑框字段。代码清单中的RichTextForm表单包含了一个标题字段和一个正文字段。 ``` from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired, Length from flask_ckeditor import CKEditorField # 从flask_ckeditor包导入 class RichTextForm(FlaskForm): title = StringField('Title', validators=[DataRequired(), Length(1, 50)]) body = CKEditorField('Body', validators=[DataRequired()]) submit = SubmitField('Publish') ``` 文章正文字段(body)使用的CKEditorField字段类型从Flask-CKEditor导入。我们可以像其他字段一样定义标签、验证器和默认值。在使用上,这个字段和WTForms内置的其他字段完全相同。比如,在提交表单时,同样使用data属性获取数据。 在模板中,渲染这个body字段的方式和其他字段也完全相同,在示例程序中,我们在模板ckeditor.html渲染了这个表单,如代码清单所示: ``` {% extends 'base.html' %} {% from 'macros.html' import form_field %} {% block content %}

Integrate CKEditor with Flask-CKEditor

{{ form.csrf_token }} {{ form_field(form.title) }} {{ form_field(form.body) }} {{ form.submit }}
{% endblock %} {% block scripts %} {{ super() }} {{ ckeditor.load() }} {% endblock %} ``` 渲染CKEditor编辑器需要加载相应的JavaScript脚本。在开发时,为了方便开发,可以使用Flask-CKEditor在模板中提供的ckeditor.load()方法加载资源,它默认从CDN加载资源,将CKEDITOR_SERVE_LOCAL设为Ture会使用扩展内置的本地资源,内置的本地资源包含了几个常用的插件和语言包。ckeditor.load()方法支持通过pkg_type参数传入包类型,这会覆盖配置CKEDITOR_PKG_TYPE的值,额外的version参数可以设置从CDN加载的CKEditor版本。 作为替代,你可以访问CKEditor官网提供的构建工具([https://ckeditor.com/cke4/builder](https://ckeditor.com/cke4/builder) )构建自己的CKEditor包,下载后放到static目录下,然后在需要显示文本编辑器的模板中加载包目录下的ckeditor.js文件,替换掉ckeditor.load()调用。 如果你使用配置变量设置了编辑器的高度、宽度和语言或是其他插件配置,需要使用ckeditor.config()方法加载配置,传入对应表单字段的name属性值,即对应表单类属性名。这个方法需要在加载CKEditor资源后调用: ``` {{ ckeditor.config(name='body') }} ``` > 提示 为了支持为不同页面上的编辑器字段或单个页面上的多个编辑器字段使用不同的配置,大多数配置键都可以通过相应的关键字在ckeditor.config()方法中传入,比如language、height、width等,这些参数会覆盖对应的全局配置。另外,Flask-CKEditor也允许你传入自定义配置字符串,更多详情可访问Flask-CKEditor文档的配置部分([https://flask-ckeditor.readthedocs.io/configuration.html](https://flask-ckeditor.readthedocs.io/configuration.html) )。 访问[http://localhost:5000/ckeditor](http://localhost:5000/ckeditor) 可以看到渲染后的富文本编辑器,如图4-7所示。 ![image.png](https://img.hacpai.com/file/2019/09/image-fa6a0d65.png) 图4-7 渲染后的编辑器页面 如果你不使用Flask-WTF/WTForms,Flask-CKEditor还提供了一个在模板中直接创建文本编辑器字段的ckeditor.create()方法,具体用法参考相关文档。