Django管理CKEditor集成。
项目描述
Django CKEditor
Django管理CKEditor集成。
提供使用CKEditor的RichTextField、RichTextUploadingField、CKEditorWidget和CKEditorUploadingWidget,包含图片上传和浏览支持。
本版本还包括
对django-storages的支持(与S3兼容)
更新ckeditor到版本4.18.0
包含所有ckeditor语言和插件文件,让每个人都能满意!(只有由ckeditor开发团队维护的插件)
安装
必需
安装或添加django-ckeditor到您的python路径。
pip install django-ckeditor
将ckeditor添加到您的INSTALLED_APPS设置。
运行collectstatic管理命令:$ ./manage.py collectstatic。这将把CKEditor所需的静态媒体资源复制到由STATIC_ROOT设置指定的目录。有关更多信息,请参阅Django关于管理静态文件的文档。
CKEditor需要知道其资产的位置,因为它只在需要时才懒加载。位置由ckeditor-init.js脚本确定,默认为static/ckeditor/ckeditor/。这并不总是有效,例如,当使用ManifestStaticFilesStorage、任何资产打包管道或其他类似内容时。django-ckeditor在这方面相当擅长自动检测正确位置,但有时您可能需要在某个地方硬编码CKEDITOR_BASEPATH。这可以在设置中硬编码,例如:
CKEDITOR_BASEPATH = "/my_static/ckeditor/ckeditor/"
如果您真的需要这样做,可以覆盖admin/change_form.html模板,例如:
{% extends "admin/change_form.html" %} {% block extrahead %} <script>window.CKEDITOR_BASEPATH = '/my_static/ckeditor/ckeditor/';</script> {{ block.super }} {% endblock %}
当然,您应该根据使用CKEditor之外的admin应用的需要来调整此代码片段。
使用具有文件上传的部件时必需
将ckeditor_uploader添加到您的INSTALLED_APPS设置。
在项目的settings.py文件中添加一个CKEDITOR_UPLOAD_PATH设置。此设置指定了到您的CKEditor媒体上传目录的相对路径。CKEditor使用Django的存储API。默认情况下,Django使用文件系统存储后端(它将使用您的MEDIA_ROOT和MEDIA_URL),如果您不使用不同的后端,您必须在MEDIA_ROOT中对该CKEDITOR_UPLOAD_PATH路径有写入权限,即:
CKEDITOR_UPLOAD_PATH = "uploads/"
当使用默认文件系统存储时,图片将上传到MEDIA_ROOT中的“uploads”文件夹,并创建针对MEDIA_URL(/media/uploads/image.jpg)的URL。
如果您想能够控制文件名的生成,您必须向您的设置中添加自定义文件名生成器
# utils.py def get_filename(filename, request): return filename.upper()
# settings.py CKEDITOR_FILENAME_GENERATOR = 'utils.get_filename'
CKEditor已与django FileSystemStorage和S3BotoStorage进行了测试。使用django-storages中的S3Storage存在问题。
对于默认文件系统存储配置,MEDIA_ROOT 和 MEDIA_URL 必须设置正确,以便媒体文件(如由 ckeditor 小部件上传的文件)可以正常工作。
将 CKEditor URL 包含添加到您的项目的 urls.py 文件中
path('ckeditor/', include('ckeditor_uploader.urls')),
注意,通过添加这些 URL,您添加了可以上传和浏览上传图像的视图。从 django-ckeditor 4.4.6 版本开始,这些视图使用 @staff_member_required 进行装饰。如果您想使用不同的权限装饰器(例如 login_required、user_passes_test 等),请手动将 ckeditor.urls 中定义的视图添加到您的 urls.py 中。
可选 - 定制CKEditor编辑器
将 CKEDITOR_CONFIGS 设置添加到项目的 settings.py 文件中。这指定了传递给 CKEditor 的 CKEditor 设置集(请参阅 CKEditor 的 设置配置),即
CKEDITOR_CONFIGS = { 'awesome_ckeditor': { 'toolbar': 'Basic', }, }
可以在实例化 RichTextField 时引用设置名称
content = RichTextField(config_name='awesome_ckeditor')
可以在实例化 CKEditorWidget 时引用设置名称
widget = CKEditorWidget(config_name='awesome_ckeditor')
通过指定名为 default 的集合,您将应用其设置到所有未显式定义 config_name 的 RichTextField 和 CKEditorWidget 对象
CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'full', 'height': 300, 'width': 300, }, }
可以指定一个自定义工具栏
CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'Custom', 'toolbar_Custom': [ ['Bold', 'Italic', 'Underline'], ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'], ['Link', 'Unlink'], ['RemoveFormat', 'Source'] ] } }
如果您想使用或需要不属于 django-ckeditor 插件集的插件,可以按以下方式指定资产和插件
text = RichTextField( config_name='forum-post', # CKEDITOR.config.extraPlugins: extra_plugins=['someplugin'], # CKEDITOR.plugins.addExternal(...) external_plugin_resources=[( 'someplugin', '/static/.../path-to-someplugin/', 'plugin.js', )], ) Alternatively, those settings can also be provided through ``CKEDITOR_CONFIGS``.
可选 - 文件上传
默认情况下,所有上传的文件都会进行 slug 化处理。要禁用此功能,请将 CKEDITOR_UPLOAD_SLUGIFY_FILENAME 设置为 False。
在项目的 settings.py 文件中将 CKEDITOR_RESTRICT_BY_USER 设置为 True(默认为 False)。这将限制对上传图像的访问权限,仅允许上传用户(例如,每个用户只能查看和上传自己的图像)。上传路径以 get_username 返回的字符串为前缀。如果将 CKEDITOR_RESTRICT_BY_USER 设置为字符串,则使用该名称属性。超级用户仍然可以查看所有图像。注意:此限制仅适用于 CKEditor 媒体浏览器内部。
将 CKEDITOR_BROWSE_SHOW_DIRS 设置为 True 以在“浏览服务器”页面上显示目录。这可以通过按存储在目录中的日期排序来按目录分组图像。
将 CKEDITOR_RESTRICT_BY_DATE 设置为 True 以按年/月/日划分上传文件。
您可以通过在设置中定义 CKEDITOR_STORAGE_BACKEND 变量来为 CKEditor 上传器设置自定义文件存储。
您可以将 CKEDITOR_IMAGE_BACKEND 设置为支持的任一后端,以启用 ckeditor 图库中的缩略图。默认情况下,不创建缩略图,使用完整大小的图像作为预览。支持的后端
ckeditor_uploader.backends.PillowBackend:使用 Pillow
使用 PillowBackend 后端,您可以使用 CKEDITOR_THUMBNAIL_SIZE 设置(以前称为 THUMBNAIL_SIZE)更改缩略图大小。默认值:(75, 75)
使用 PillowBackend 后端,您可以将上传的图像转换为 jpeg 并进行压缩,以节省磁盘空间。将 CKEDITOR_FORCE_JPEG_COMPRESSION 设置为 True(默认为 False)。您可以更改 CKEDITOR_IMAGE_QUALITY 设置(以前称为 IMAGE_QUALITY),该设置传递给 Pillow
图像质量,从1(最差)到95(最佳)的范围内。默认值为75。应避免超过95的值;100将禁用JPEG压缩算法的部分,导致文件体积增大而图像质量提升不明显。
此功能对动画图像不可用。
用法
字段
将富文本编辑功能添加到您的模型中最快的方法是使用包含的 RichTextField 模型字段类型。CKEditor小部件作为表单字段渲染,但在所有其他方面,字段的行为与标准Django TextField 相同。例如
from django.db import models from ckeditor.fields import RichTextField class Post(models.Model): content = RichTextField()
对于文件上传支持,请使用来自 ckeditor_uploader.fields 的 RichTextUploadingField。
部件
或者,您可以使用包含的 CKEditorWidget 作为表单字段的控件。例如
from django import forms from django.contrib import admin from ckeditor.widgets import CKEditorWidget from post.models import Post class PostAdminForm(forms.ModelForm): content = forms.CharField(widget=CKEditorWidget()) class Meta: model = Post fields = '__all__' class PostAdmin(admin.ModelAdmin): form = PostAdminForm admin.site.register(Post, PostAdmin)
对于文件上传支持,请使用来自 ckeditor_uploader.widgets 的 CKEditorUploadingWidget。
覆盖小部件模板
在Django >=1.11中,要覆盖 ckeditor/widget.html,您有以下三种方法
将 ckeditor/widget.html 放置于 BASE_DIR/templates 中
将 FORM_RENDERER 更改为 TemplateSettings。
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
将 templates 文件夹包含在 DIRS 中
TEMPLATES = [{ ... 'DIRS': [os.path.join(BASE_DIR, 'templates'), ], ... }]
将 'django.forms' 添加到 INSTALLED_APPS。
将 ckeditor/widget.html 放置于 your_app/templates 中,并将 'your_app' 置于 'ckeditor' 和 'ckeditor_uploader' 之前 INSTALLED_APPS 中。
从 CKEditorWidget 继承并使用 settings.py 中定义的 TEMPLATES DIRS 中的自定义模板覆盖 template_name。
class MyCustomCKEditorWidget(CKEditorWidget): template_name = "templates/custom_ckeditor/widget.html"
django管理后台之外
当您在管理面板外渲染表单时,您必须确保所有表单媒体都存在,以便编辑器可以工作。一种实现方式如下
<form> {{ myform.media }} {{ myform.as_p }} <input type="submit"/> </form>
或者您可以像在演示应用中那样手动加载媒体
{% load static %} <script type="text/javascript" src="{% static "ckeditor/ckeditor-init.js" %}"></script> <script type="text/javascript" src="{% static "ckeditor/ckeditor/ckeditor.js" %}"></script>
当您需要在模板中安全地渲染 RichTextField 的HTML输出时,只需使用 {{ content|safe }},Django的safe过滤器
管理命令
包含一个管理命令来为已包含在 CKEDITOR_UPLOAD_PATH 中的图像创建缩略图。当使用 django-ckeditor 与现有图像一起使用时,这很有用。按照以下方式发出命令
$ ./manage.py generateckeditorthumbnails
注意:如果您正在使用自定义视图,请记住在表单的媒体中包含 ckeditor.js,无论是通过 {{ form.media }} 还是通过 <script> 标签。管理员会自动为您执行此操作。有关更多信息,请参阅 Django的表单媒体文档。
使用S3
请参阅 https://django-storages.readthedocs.org/en/latest/
注意: django-ckeditor 不包含在 settings.py 中的此行时,将无法通过 django-storages 与S3一起使用。
AWS_QUERYSTRING_AUTH = False
如果您想使用allowedContent
要使 allowedContent 的工作,请禁用 stylesheetparser 插件。因此,在 settings.py 中包含此内容。
CKEDITOR_CONFIGS = { "default": { "removePlugins": "stylesheetparser", } }
插件
django-ckeditor 包含以下 ckeditor 插件,但并非所有插件都默认启用
a11yhelp, about, adobeair, ajax, autoembed, autogrow, autolink, bbcode, clipboard, codesnippet, codesnippetgeshi, colordialog, devtools, dialog, div, divarea, docprops, embed, embedbase, embedsemantic, filetools, find, flash, forms, iframe, iframedialog, image, image2, language, lineutils, link, liststyle, magicline, mathjax, menubutton, notification, notificationaggregator, pagebreak, pastefromword, placeholder, preview, scayt, sharedspace, showblocks, smiley, sourcedialog, specialchar, stylesheetparser, table, tableresize, tabletools, templates, uicolor, uploadimage, uploadwidget, widget, wsc, xml
图像/文件上传功能由 uploadimage 插件完成。
限制文件上传
要将上传功能限制为仅图像文件,请在 settings.py 文件中添加 CKEDITOR_ALLOW_NONIMAGE_FILES = False。目前默认允许非图像文件。
默认情况下,上传和浏览URL使用 staff_member_required 装饰器 - ckeditor_uploader/urls.py - 如果您想使用其他装饰器,只需在该 urls.py 中插入两个找到的URL,不要包含它。
演示/测试应用
如果您克隆了仓库,您将能够运行 ckeditor_demo 应用程序。
pip install -r ckeditor_demo_requirements.txt
运行 python manage.py migrate
如果您想测试管理面板中的小部件,请创建一个超级用户。
启动开发服务器。
主页面(/)上有一个 forms.Form,在管理中有一个使用小部件的模型。数据库设置为 sqlite3,STATIC/MEDIA_ROOT 设置为临时目录中的文件夹。
运行selenium测试
推荐使用 tox 运行 selenium 测试。使用 SELENIUM 环境变量选择合适的 selenium 驱动程序,并且可以选择只运行一个环境,因为 selenium 需要一些时间,或者因为您没有在本地上安装所有支持的 Python 版本。示例使用的是 Python 3.9 和 Django 4.0 的组合,这是在编写时的一个受支持的组合。
# Either SELENIUM=firefox tox -e py39-dj40 # Or SELENIUM=chromium tox -e py39-dj40 # Or even SELENIUM=firefox tox
故障排除
如果您的浏览器在图片上传窗口中显示上传的图片有问题,您可能需要更改 Django 设置。
X_FRAME_OPTIONS = 'SAMEORIGIN'
更多信息请参阅 https://docs.django.ac.cn/en/1.11/ref/clickjacking/#setting-x-frame-options-for-all-responses
示例ckeditor配置
CKEDITOR_CONFIGS = { 'default': { 'skin': 'moono', # 'skin': 'office2013', 'toolbar_Basic': [ ['Source', '-', 'Bold', 'Italic'] ], 'toolbar_YourCustomToolbarConfig': [ {'name': 'document', 'items': ['Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates']}, {'name': 'clipboard', 'items': ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']}, {'name': 'editing', 'items': ['Find', 'Replace', '-', 'SelectAll']}, {'name': 'forms', 'items': ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField']}, '/', {'name': 'basicstyles', 'items': ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']}, {'name': 'paragraph', 'items': ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language']}, {'name': 'links', 'items': ['Link', 'Unlink', 'Anchor']}, {'name': 'insert', 'items': ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe']}, '/', {'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']}, {'name': 'colors', 'items': ['TextColor', 'BGColor']}, {'name': 'tools', 'items': ['Maximize', 'ShowBlocks']}, {'name': 'about', 'items': ['About']}, '/', # put this to force next toolbar on new line {'name': 'yourcustomtools', 'items': [ # put the name of your editor.ui.addButton here 'Preview', 'Maximize', ]}, ], 'toolbar': 'YourCustomToolbarConfig', # put selected toolbar config here # 'toolbarGroups': [{ 'name': 'document', 'groups': [ 'mode', 'document', 'doctools' ] }], # 'height': 291, # 'width': '100%', # 'filebrowserWindowHeight': 725, # 'filebrowserWindowWidth': 940, # 'toolbarCanCollapse': True, # 'mathJaxLib': '//cdn.mathjax.org/mathjax/2.2-latest/MathJax.js?config=TeX-AMS_HTML', 'tabSpaces': 4, 'extraPlugins': ','.join([ 'uploadimage', # the upload image feature # your extra plugins here 'div', 'autolink', 'autoembed', 'embedsemantic', 'autogrow', # 'devtools', 'widget', 'lineutils', 'clipboard', 'dialog', 'dialogui', 'elementspath' ]), } }
变更日志
未发布
6.7.0
CKEditor 4.22.1
修复了暗黑模式的问题。
添加了对 Pillow 10 的支持。
6.6.0
需要 django-js-asset 的新版本,它实际上与 Django 4.1 一起工作。
CKEditor 4.21.0
修复了与暗黑 Django 管理主题一起使用时的 CKEditor 样式。
6.5.0
如果定义了 CKEDITOR_BASEPATH,则避免了调用 static()。
修复了 ./manage.py generateckeditorthumbnails,以便在图像上传后端重构后再次工作。
CKEditor 4.19.1
在应用程序启动期间停止了调用 static()。
添加了 Django 4.1 支持。
6.4.0
将小部件的上下文更改为与 Django 有更小的偏差。删除了一些在捆绑的 ckeditor/widget.html 模板中未使用的模板变量。这仅影响您使用自定义小部件或小部件模板的情况。
停止支持 Python < 3.8、Django < 3.2。
添加了预提交配置。
删除了 Travis CI 配置;Travis CI 已经几个月没有运行我们的单元测试了。
添加了 GitHub 动作以运行测试。
通过使用 SELENIUM=firefox 或 SELENIUM=chromium 环境变量,使 selenium 测试需要选择性地启用。
6.3.0
CKEditor 4.18.0
使小部件类中覆盖 CKEditor 模板成为可能。
将 CKEDITOR_IMAGE_BACKEND 修改为需要点分模块路径(目前仍然支持旧标识符)。
6.2.0
CKEditor 4.17.1
6.1.0
CKEditor 4.16.1
6.0.0
将 ugettext_lazy() 替换为 gettext_lazy()
CKEditor 4.14.1
将我们的 JS 脚本修改为监听 Django 的 formset:added 信号,而不是检测内联按钮的点击。这应该修复与各种 Django 管理皮肤兼容的问题。
停止了对 Django < 2.2 和 Python < 3.6 的兼容性保证。
使用 black 和 isort 重新格式化代码。
添加了使用 Django 3.1 的测试。
5.9.0
支持 Django 3.0。
支持 Python 3.8。
用 static 替换 staticfiles templatetags 库的使用。
向测试中添加了一个模板验证步骤。
国际化 ckeditor_upload browse.html 模板。
向 ckeditor_demo 添加了 ckeditor_upload 功能和自定义配置示例。
CKEditor 4.13.1
5.8.0
CKEditor 4.13
5.7.1
CKEditor 4.11.4
再次修复 JS 处理。
允许使用设置来配置 extra_plugins 和 external_plugin_resources
5.7.0
修复 Django 1.8 - 1.10 回退问题
取消对低于 1.8 版本的 Django 的支持
Django 2.2 支持
文档更新
对 JS 处理进行的小幅修复
5.6.1
修复不好的 PyPI 包
5.6.0
Django 2.1 兼容性,最小支持的 Django 版本是 1.11 LTS
设置自定义 Django 文件后端,用于 CKEditor 上传应用程序。
5.5.0
CKEditor 4.9.2
文档改进
允许 CKEDITOR_RESTRICT_BY_USER 的用户非字符串属性
5.4.0
Django 2.0 兼容性
5.3.1
实际上包含了设置 CKEDITOR_BASEPATH 的代码。
CKEditor 4.7.3
5.3.0
CKEditor 4.7
通过设置 CKEDITOR_BASEPATH 修复存储问题(希望这次是真的)
文档更新
添加了一个 CKEDITOR_RESTRICT_BY_DATE 设置,将上传的文件添加到包含当前日期的文件夹中。
添加了一个 CKEDITOR_FILEICONS 设置,允许覆盖 Gallerific 使用的图标。
添加了一个 CKEDITOR_FILENAME_GENERATOR 设置,允许指定一个可调用的函数来修改上传文件的文件名。
为 Pillow 图像后端添加了 THUMBNAIL_SIZE 和 IMAGE_QUALITY 设置。
实际上在可 pip 安装的包中包含了 ckeditor_uploader 的静态资源。
删除了 CKEDITOR_JQUERY_URL 和 jQuery 依赖。现在 CKEditor 的激活使用纯 JavaScript。依赖项是 JSON.parse 和 document.querySelectorAll,这些在现代几乎所有浏览器中都得到支持。
修复了 CKEditor 语言未为每个请求单独设置的问题。
5.2.2
Django 1.11 支持
删除 South 迁移
通过设置 CKEDITOR_BASEPATH 修复存储问题
5.2.1
修复 CKEditor 包静态路径
5.2.0
Django 1.10 更新
开发依赖项更新
CKEditor 4.6.1
支持粘贴图像
修复 ManifestStaticFilesStorage 的问题
5.1.1
重新添加缺失的附加 CkEditor 插件
5.1.0
将 CkEditor 更新到 4.5.10
Django 1.10 兼容性更改
文档更新
5.0.3
修复文件/目录浏览和搜索问题
编辑器宽度样式修复
添加了 CKEDITOR_BROWSE_SHOW_DIRS
添加了 CKEDITOR_ALLOW_NONIMAGE_FILES
Python 2.6 兼容性修复
5.0.2
添加了包中缺失的模板
5.0.1
更新 Readme 以反映不兼容的更改
5.0.0 (4.5.3)
将文件上传代码移动到新的 Django 应用程序 - ckeditor_uploader。 RichTextField 不使用文件上传,这些上传已移动到 RichTextUploadingField。
文件上传支持已移动到 ckeditor_uploader。URL 在 ckeditor_uploader.urls 中,而对于文件上传小部件,您必须使用来自 ckeditor_uploader.fields 的 RichTextUploadingField 而不是来自 ckeditor.fields 的 RichTextField。
将 ckeditor 更新到 4.5.3(从 https://github.com/ckeditor/ckeditor-dev/tree/4.5.3)
添加了 CKEditor 维护者提供的新插件:adobeair、ajax、autoembed、autogrow、autolink、bbcode、codesnippet、codesnippetgeshi、devtools、divarea、docprops、embed、embedbase、embedsemantic、filetools、iframedialog、image2、language、lineutils、mathjax、menubutton、notification、notificationaggregator、placeholder、sharedspace、sourcedialog、stylesheetparser、tableresize、uicolor、uploadimage、uploadwidget、widget、xml
在设置配置中添加 zip_safe=False,以强制不创建 “.egg” 文件
添加 Python Wheel 包配置
添加 setup.py 函数以轻松发布 “.egg” 包和 Wheel 包,并在 git 上标记版本( python setup.py publish 和 python setup.py tag )
改进 Tox 配置以进行代码覆盖率检查、代码质量检查(flake8)、导入顺序检查(isort)以及使用 django master 分支进行测试
添加代码质量配置
添加 EditorConfig 配置文件
重构代码以符合PEP8规范
4.5.1
修复了非图像文件上传中的未绑定变量
4.5.0
更新ckeditor到4.5.1版本
回滚django.contrib.staticfiles.templatetags.staticfiles.static的使用,因为该用法导致某些存储出现问题
允许上传非图像文件(上传小部件期望图像,因此当前用户体验不佳)
对selenium测试进行了一些重构和修复
4.4.8
修复Python 3兼容性问题
以正确的方式获取静态文件路径
修复Django 1.7弃用警告
在readme中添加更多示例
4.4.7
仅允许上传视图上的POST请求
在图像浏览器中排除隐藏文件
防止图像浏览器视图的缓存
使用延迟JSON编码器以在CKEditor设置中支持i18n。
其他文档更新
正确检查jQuery是否存在
更新到CKEditor 4.4.6
4.4.6
默认情况下使上传/浏览视图成为staff_member_required(可以覆盖)
修复与其他jQuery版本冲突的ckeditor初始化代码
支持grappelli内联表单小部件。
从小部件模板中移除奇数的左外边距。
允许使用chromium运行selenium测试。
4.4.5
在Readme中修复合并后的包名。
4.4.4
更新CKEditor到4.4.4完整包 - 包含您可能需要的所有插件和静态文件
对内联编辑器进行修复
编辑器初始化使用jQuery。您需要指定CKEDITOR_JQUERY_URL才能使其工作。您可以使用
CKEDITOR_JQUERY_URL = '//ajax.googleapis.ac.cn/ajax/libs/jquery/2.1.1/jquery.min.js'
4.4.0
更新CKEditor到4.4.1
修复Django 1.7兼容性问题
4.2.8
更新CKEditor到4.3.3
4.2.7
修复如果文件名只包含非法字符,则将slugifying更改为空文件名的错误。使用随机字符串作为后备。
在ckeditor文件浏览器中不要为非图像文件使用IMG标签。
从破坏collectstatic的CSS文件中删除不存在的图像引用。
其他修复
4.2.5 / 4.2.6
修复静态文件安装 - 从distutils切换到setuptools
4.2.4
添加了一个带有selenium集成测试的新演示应用程序
为Python 3.3和2.7测试设置tox
将图像处理提取到后端。PIL/Pillow现在是可选的。可以添加其他后端。
修复了缩略图生成错误
4.2.3
Python 3.3兼容性
默认情况下对所有上传文件进行slugifying(新设置CKEDITOR_SLUGIFY_FILENAME)
编辑链接(<a href>)时现在可以正确上传文件
4.2.2
widgets.py中的Python 3.3兼容性
4.2.1
包含CKEditor版本4.2.1。
支持Django 1.6
4.0.2
包含CKEditor版本4.0.2。
3.6.2.1
从发行版中删除不需要的静态文件。
使用Pillow而不是PIL,因为它在所有系统上都可以构建。
3.6.2
0.0.9
添加了通过CKEDITOR_CONFIGS设置配置CKeditor的能力。感谢 jeffh 的建议。
0.0.8
移除了有问题的URL包含检查。
0.0.7
将Egg包更正为排除测试admin.py和models.py。
0.0.6
0.0.5
支持csrf_exempt向后兼容。感谢 chr15m 。
0.0.4
包含资源,对此表示歉意。
0.0.3
更健壮的PIL导入。感谢 buchuki 。
改进CKEDITOR_MEDIA_PREFIX设置错误。
0.0.2
在清单中包含README.rst。
0.0.1
添加CKEDITOR_UPLOAD_PREFIX设置。感谢 chr15m 提供的意见。