生产环境Django Admin中CKEditor及上传器异常求助
Django生产环境CKEditor上传器故障排查及替代方案
问题描述
项目已部署至生产环境,CKEditor及CKEditor_uploader在本地服务器正常工作,但生产环境的Django Admin面板中无法显示。需排查可能原因,或提供实现博客文章富文本及图片上传的替代方案。
更新说明
已恢复CKEditor显示,但上传器仍无法正常工作,已严格遵循文档步骤完成配置。
相关代码配置
settings.py
STATIC_URL = '/static/' MEDIA_URL = '/static/images/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] MEDIA_ROOT = os.path.join(BASE_DIR, '/home/martinhenso/public_html/static/images/') STATIC_ROOT = os.path.join(BASE_DIR, '/home/martinhenso/public_html/static') CKEDITOR_UPLOAD_PATH = "uploads/"
urls.py
urlpatterns = [ path('admin/', admin.site.urls), path('', include('martinhensonphotography.urls')), path('ckeditor/', include('ckeditor_uploader.urls')), ] urlpatterns += staticfiles_urlpatterns() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.MEDIA_ROOT)
models.py
class Topic(models.Model): title = models.CharField(max_length=100) content = RichTextUploadingField() def __str__(self): return self.title class BlogPost(models.Model): blog_title = models.CharField(max_length=255) blog_article = RichTextField(null=True, blank=True) blog_image = models.ImageField(null=True, blank=True, upload_to="images", default="default.png") def __str__(self): return self.blog_title
admin.py
from django.contrib import admin from . models import PostImage, EnterImage, BlogPost, Topic # Register your models here. admin.site.register(PostImage) admin.site.register(BlogPost) admin.site.register(EnterImage) admin.site.register(Topic)
可能的原因排查
- 路径拼接错误:
os.path.join(BASE_DIR, '/home/...')会忽略BASE_DIR(第二个参数为绝对路径),需改为MEDIA_ROOT = '/home/martinhenso/public_html/static/images/',或根据BASE_DIR实际位置调整为相对路径拼接 - 文件权限不足:生产环境中
MEDIA_ROOT、CKEDITOR_UPLOAD_PATH对应的目录需给Web服务器进程(如www-data、apache)写入权限,执行命令:chown -R www-data:www-data /home/martinhenso/public_html/static/images/uploads chmod -R 755 /home/martinhenso/public_html/static/images/uploads - 静态文件未收集:确保执行过
python manage.py collectstatic,将CKEditor静态文件同步到STATIC_ROOT目录 - URL配置错误:urls.py最后一行
static(settings.STATIC_URL, document_root=settings.MEDIA_ROOT)错误,应改为static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - CSRF验证失败:检查浏览器控制台是否有CSRF相关错误,确保Admin页面CSRF令牌正常加载
替代方案
1. 使用TinyMCE
- 安装
django-tinymce,配置富文本字段与图片上传规则 - 模型中替换为
TinyMCEField,适配生产环境静态/媒体文件路径与权限要求
2. 使用Summernote
- 安装
django-summernote,自带图片上传功能,配置流程简单 - Admin注册模型时使用
SummernoteModelAdmin,自动启用富文本编辑器与上传能力
3. 自定义富文本+原生上传
- 用普通
TextField配合前端富文本编辑器(如Quill),单独编写Django视图处理图片上传 - 将上传图片存储到
MEDIA_ROOT,返回图片URL给前端插入富文本内容
内容的提问来源于stack exchange,提问作者David Henson
相关产品推荐
相关产品推荐

