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

django-ckeditor-5本地文件上传失败及YouTube链接不显示问题求助

问题解决指南

一、图片上传CSRF 403问题解决

1. 检查Django CSRF Cookie配置

cookiecutter-django默认可能开启了CSRF_COOKIE_HTTPONLY = True,这会导致前端JS无法读取csrftoken cookie,进而让django-ckeditor-5无法自动携带CSRF token。

修改settings.py:

CSRF_COOKIE_HTTPONLY = False

如果需要保持HTTPONLY=True,则手动给CKEditor上传请求添加CSRF头。

2. 手动配置CKEditor上传请求的CSRF Token

方式一:模板中直接配置

在渲染编辑器的模板里,给CKEditor初始化代码添加上传头配置:

ClassicEditor
  .create(document.querySelector('#your-editor-element'), {
    upload: {
      headers: {
        'X-CSRFToken': '{{ csrf_token }}'
      }
    }
  })
  .catch(err => console.error(err));

方式二:自定义表单Widget配置

如果用Django表单的CKEditor5Widget,在forms.py中修改Widget配置:

from django import forms
from ckeditor5.widgets import CKEditor5Widget

class YourContentForm(forms.Form):
    content = forms.CharField(widget=CKEditor5Widget(config_name='default'))

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 传入CSRF Token到上传配置
        self.fields['content'].widget.config['upload'] = {
            'headers': {
                'X-CSRFToken': self.data.get('csrfmiddlewaretoken', '')
            }
        }

3. 验证CSRF信任源

Docker环境下,确保settings.py中CSRF_TRUSTED_ORIGINS包含你的服务域名,比如:

CSRF_TRUSTED_ORIGINS = ['https://your-domain.com', 'http://localhost:8000']

4. 升级django-ckeditor-5到最新版

部分旧版本存在CSRF自动处理的bug,执行升级:

pip install --upgrade django-ckeditor-5

二、YouTube视频无法显示问题解决

1. 确保CKEditor5启用MediaEmbed插件

在settings.py的CKEDITOR5_CONFIGS中,添加MediaEmbed到工具栏和插件列表,并配置YouTube支持:

CKEDITOR5_CONFIGS = {
    'default': {
        'toolbar': [
            'heading', '|', 'bold', 'italic', 'link', 'bulletedList', 
            'numberedList', 'blockQuote', 'mediaEmbed'  # 确保包含mediaEmbed
        ],
        'plugins': ['MediaEmbed'],
        'mediaEmbed': {
            'previewsInData': True,
            'providers': [
                {
                    'name': 'youtube',
                    'url': '^https?://(?:www\.)?youtube\.com/watch\?v=([a-zA-Z0-9_-]+)',
                    'html': '''<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
                                    <iframe src="https://www.youtube.com/embed/$1" 
                                            style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" 
                                            allowfullscreen></iframe>
                                </div>'''
                }
            ]
        }
    }
}

2. 安全渲染编辑器内容

在结果页面模板中,使用|safe过滤器渲染内容,避免HTML转义:

{{ your_content_variable|safe }}

3. 调整Content Security Policy (CSP)

cookiecutter-django默认有严格的CSP,需要允许加载YouTube的iframe。修改settings.py:

CSP_FRAME_SRC = ("'self'", "https://www.youtube.com")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:36:15