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
相关产品推荐
相关产品推荐

