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

Django集成ckeditor_uploader报错:WindowsPath无法JSON序列化

问题:Django集成ckeditor_uploader后台报错Object of type WindowsPath is not JSON serializable

在Django默认后台添加文章时触发模板渲染错误,具体报错:

模板渲染错误,位于
\venv\lib\sitepackages\django\contrib\admin\templates\admin\change_form.html,
第6行出错
Object of type WindowsPath is not JSON serializable

相关代码

模板片段(change_form.html)

{% extends "admin/base_site.html" %}
{% load i18n admin_urls static admin_modify %}

{% block extrahead %}{{ block.super }}
<script src="{% url 'admin:jsi18n' %}"></script>
{{ media }}
{% endblock %}

settings.py配置

MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / 'media'

CKEDITOR_BASEPATH = BASE_DIR / 'static/ckeditor/ckeditor'
CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': 'full',
        'height': 300,
        'width': 1300,
    },
}

models.py代码

from django.db import models
from ckeditor_uploader.fields import RichTextUploadingField

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=get_default_category)
    text = RichTextUploadingField(default="add your post here")

已尝试在urls.py的urlpatterns后添加+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),但问题未解决。

解决方案

问题根源是CKEDITOR_BASEPATH的类型错误——使用BASE_DIR / 'xxx'得到的是WindowsPath对象,Django在序列化媒体资源配置时无法处理该类型。

修改settings.py中的配置,将Path对象转为字符串:

# 修正CKEDITOR_BASEPATH
CKEDITOR_BASEPATH = str(BASE_DIR / 'static/ckeditor/ckeditor')
# 可选:统一MEDIA_ROOT为字符串格式
MEDIA_ROOT = str(BASE_DIR / 'media')

修改完成后重启Django服务,后台的模板渲染错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:30:01