Django-ckeditor模板路径缺失报错排查求助
你碰到的这个模板找不到的问题,大概率是配置环节漏了几个关键点,我帮你梳理下常见的排查方向和解决办法:
1. 确认INSTALLED_APPS配置完整
你可能漏加了ckeditor_uploader到INSTALLED_APPS里。虽然你安装了django-ckeditor,但上传相关的功能(包括RichTextUploadingField)依赖这个子应用,而且它的模板查找逻辑需要这个app在INSTALLED_APPS中。修改你的settings.py:
INSTALLED_APPS = [ # 其他默认应用... 'ckeditor', 'ckeditor_uploader', # 必须加上这个 # 你的自定义应用... ]
注意顺序,ckeditor要放在ckeditor_uploader前面,这样模板查找会优先从正确的目录读取。
2. 重新执行collectstatic并验证文件
你提到运行manage.py collectstatic只新增了2个文件,这明显有问题——django-ckeditor包含大量静态资源和模板文件,说明collectstatic没有正确收集ckeditor的文件。
先检查你的STATIC_ROOT设置是否指向了正确的目录,然后重新执行命令(加上--clear参数清空旧文件,确保重新收集):
python manage.py collectstatic --clear
执行完成后,去你的STATIC_ROOT目录下检查,应该能看到ckeditor/和ckeditor_uploader/两个文件夹,并且ckeditor/templates/ckeditor/widget.html文件确实存在。
3. 确保模板加载配置正确
检查settings.py中的TEMPLATES配置,确保APP_DIRS设置为True——这个参数控制Django是否自动从各个app的templates目录加载模板,如果设为False,Django只会从DIRS指定的自定义模板目录查找,自然找不到ckeditor app里的widget.html:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 你的自定义模板目录 'APP_DIRS': True, # 这个必须设为True 'OPTIONS': { 'context_processors': [ # 默认的上下文处理器... ], }, }, ]
4. 检查模型字段的导入路径是否正确
确认你导入的字段类是正确的:
- 如果使用
RichTextField,导入路径是from ckeditor.fields import RichTextField - 如果使用
RichTextUploadingField,导入路径是from ckeditor_uploader.fields import RichTextUploadingField
有时候不小心导入错了类(比如从ckeditor_uploader导入RichTextField),也会导致模板路径指向错误。
按照上面的步骤逐一排查,应该能解决模板找不到的问题。我之前遇到过类似的情况,就是漏加了ckeditor_uploader到INSTALLED_APPS,加上之后重新执行collectstatic就正常了。
内容的提问来源于stack exchange,提问作者Pablo Fernandez

