Django2.2.6 admin面板RichTextUploadingField不显示问题排查
问题原因
RichTextField能正常显示但RichTextUploadingField加载失败,和Django 2.2.6版本本身兼容性无关,核心是配置存在3处错误:
- urls.py中ckeditor路由缺少尾斜杠,会导致上传相关接口路径匹配失败,富文本组件初始化时请求接口报错中断渲染
- 缺少
MEDIA_URL、MEDIA_ROOT配置,且CKEDITOR_UPLOAD_PATH配置错误:该参数是相对于MEDIA_ROOT的相对存储路径,直接写media/会造成路径重复嵌套,上传的图片资源无法被正常访问 - 未配置开发环境下的media文件服务路由,且未确认静态文件收集、依赖安装情况,会导致组件所需的JS/CSS资源、上传接口全部返回404,组件无法正常渲染
基础版RichTextField不依赖上传接口、不涉及media资源访问,所以不受上述配置错误影响,可以正常显示。
修复方案
按以下步骤逐一修正配置即可:
- 修正项目根urls.py配置
补全ckeditor路由的尾斜杠,添加开发环境下的media文件路由支持,参考代码:from django.conf import settings from django.conf.urls.static import static from django.urls import path, include urlpatterns = [ # 保留你项目原有的其他路由配置 path('ckeditor/', include('ckeditor_uploader.urls')), # 注意路径末尾的斜杠不能漏 ] # 开发环境自动映射media路径,生产环境需要由web服务器(Nginx/Apache)配置media路径映射 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) - 修正settings.py配置
补全缺失的media相关配置,调整CKEditor上传路径,参考代码:import os INSTALLED_APPS = [ # 保留你项目原有的其他app配置 'ckeditor', 'ckeditor_uploader', ] # 原有静态文件配置保留 STATIC_URL = '/static/' STATIC_ROOT = os.path.join('/home/myapp/public_html/static') # 新增media文件配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join('/home/myapp/public_html/media') # 修正上传路径:文件会实际存在 MEDIA_ROOT/uploads/ckeditor/ 目录下 CKEDITOR_UPLOAD_PATH = "uploads/ckeditor/" - 完成配置后执行检查操作
- 安装图片处理依赖:执行
pip install pillow,CKEditor图片上传功能依赖该库 - 生产环境部署前执行
python manage.py collectstatic,将CKEditor相关的JS/CSS等静态文件收集到STATIC_ROOT目录,避免静态资源404 - 给MEDIA_ROOT目录配置Django进程可读写的权限,避免上传时因权限问题报错
- 重启Django服务,清空浏览器缓存后重新进入admin后台即可看到RichTextUploadingField正常加载,图片上传功能可正常使用
- 安装图片处理依赖:执行
内容的提问来源于stack exchange,提问作者devo
相关产品推荐
相关产品推荐

