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

Django CKEditor图片无法显示问题排查求助

CKEditor上传图片后无法显示的排查与解决方法

我帮你分析下这个问题:从你给出的图片URL能看出来,CKEditor生成的图片路径是跟着当前文章的URL走的(/blog/post/hello-23-1547897944/uploads/...),但实际上传的文件是存在项目的uploads/目录下的,这就导致URL路径和实际文件位置不匹配,所以图片无法加载。

核心原因是你缺少了Django媒体文件的关键配置,下面是具体的解决步骤:

1. 完善settings.py的媒体文件配置

打开你的settings.py,添加以下配置(如果已经有部分配置,调整对应值即可):

import os

# 项目根目录(如果BASE_DIR没定义,先加上这句)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 媒体文件的存储根目录(指向你上传文件的实际文件夹)
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
# 媒体文件的访问URL前缀
MEDIA_URL = '/media/'

# 保持你原来的CKEditor配置
CKEDITOR_UPLOAD_PATH = 'uploads/'

这里要注意:CKEDITOR_UPLOAD_PATH是相对于MEDIA_ROOT的路径,所以最终图片会存在MEDIA_ROOT/uploads/(也就是项目根目录下的uploads/uploads/),如果你想直接存在根uploads目录,把CKEDITOR_UPLOAD_PATH改成''或者'/'即可。

2. 在urls.py中添加媒体文件访问路由

在项目根目录的urls.py里,添加处理媒体文件的路由,这样Django在开发环境中才能正确返回上传的图片:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 你的其他现有路由...
    path('ckeditor/', include('ckeditor_uploader.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

注意:static()函数只在开发环境(DEBUG=True)生效,生产环境需要用Nginx、Apache等服务器直接处理媒体文件请求,不要依赖Django的这个配置。

3. 验证配置是否生效

重新启动Django服务后,再上传一张图片,此时CKEditor生成的图片URL应该变成类似:
http://127.0.0.1:8000/media/uploads/2019/01/19/southside.jpg
这个路径就能正确指向你uploads/目录下的文件了。

另外还要确认两个细节:

  • 确保uploads文件夹有正确的读写权限(Django进程能写入,Web服务器能读取)
  • 如果之前已经上传的图片,需要手动修改数据库中存储的图片URL路径,或者重新上传一次

内容的提问来源于stack exchange,提问作者nashyvan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:00:21