You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:51:09