如何在django-ckeditor==6.3.2中添加自定义模板?
解决django-ckeditor 6.3.2添加自定义模板的方法
核心思路:避免修改第三方包文件,在项目内维护自定义模板
直接修改site-packages里的CKEditor文件不可靠,更新包或重新部署时会丢失修改,且collectstatic不会优先采用这类修改。正确方式是在项目静态文件目录中创建自定义模板配置,通过settings.py指定加载。
步骤1:创建项目内的模板配置文件
- 在项目的静态文件目录(比如
your_app/static/ckeditor/)下创建路径:plugins/templates/templates/ - 在该路径下新建
custom_templates.js,内容如下:
CKEDITOR.addTemplates("default", { imagesPath: CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates") + "templates/images/"), templates: [ { title: "欢迎模板", image: "template2.gif", description: "用于发送给客户的欢迎消息模板", html: '<h2>Welcome</h2><p>Hi, <strong>Name here</strong></p><p>You have recently shown an interest . . . </p>' }, // 可继续添加更多模板 { title: "通知模板", image: "template1.gif", description: "通用通知模板", html: '<h3>重要通知</h3><p>尊敬的用户:</p><p>[通知内容]</p>' } ] });
- 若需要自定义模板预览图,将图片(如
template2.gif)放到plugins/templates/templates/images/路径下。
步骤2:修改settings.py配置CKEditor
更新CKEDITOR_CONFIGS,指定加载自定义模板文件,并确保templates插件启用:
CKEDITOR_UPLOAD_PATH = "file_upload/" CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'full', # 确保Templates按钮在工具栏中(full工具栏默认包含,也可显式指定) 'toolbar_Full': [ ['Templates'], # 其他工具栏选项... ], # 指定加载自定义模板文件 'templates_files': [ '/static/ckeditor/plugins/templates/templates/custom_templates.js', # 可选:保留默认模板就添加此行,完全替换则移除 # CKEDITOR.plugins.getPath('templates') + 'templates/default.js' ], 'templates_replaceContent': True, # 插入模板时替换现有内容 }, }
步骤3:收集静态文件并测试
- 执行
collectstatic命令,将项目内的静态文件收集到指定根目录:
python manage.py collectstatic
- 重启Django服务,打开富文本编辑器,点击「模板」按钮即可看到自定义模板。
关键说明
- 禁止修改
site-packages文件:第三方依赖文件属于外部资源,修改后无法持久化,不符合项目规范。 - 模板加载优先级:
templates_files配置的文件按顺序加载,同时保留默认模板文件时,自定义模板会和默认模板共存;仅保留自定义文件则完全替换默认模板。 - 预览图路径:
imagesPath自动指向CKEditor模板插件的images目录,使用自定义图片时确保路径正确,或直接使用绝对路径。
内容的提问来源于stack exchange,提问作者Uniquedesign
相关产品推荐
相关产品推荐

