如何修改Django框架下CKEditor默认外层div包装器的类名
你之前的写法不生效的原因是:给CKEditorWidget传入的attrs参数只会作用于编辑器内部的textarea元素,外层的django-ckeditor-widget类是django-ckeditor包自动包裹的div容器上的默认类,无法通过该参数直接修改。
可行解决方案如下:
方案1:自定义Widget继承CKEditorWidget,重写渲染逻辑(推荐,侵入性低,可灵活控制单个实例类名)
先定义自定义Widget:
from ckeditor.widgets import CKEditorWidget class CustomCKEditorWidget(CKEditorWidget): def render(self, name, value, attrs=None, renderer=None): # 调用父类方法获取原生渲染结果 original_html = super().render(name, value, attrs, renderer) # 替换默认类名,若需要保留原有类可改为 replace('django-ckeditor-widget', 'django-ckeditor-widget MyCustomClass') modified_html = original_html.replace('django-ckeditor-widget', 'MyCustomClass') return modified_html
在表单中使用自定义Widget即可:
class PostAdminForm(forms.ModelForm): content = forms.CharField(widget=CustomCKEditorWidget()) class Meta: model = Post # 需根据需求补全fields配置 fields = ["content"]
方案2:覆写CKEditor的全局Widget模板(适合批量修改所有CKEditor实例的外层类)
操作步骤:
- 在你的Django项目
templates目录下创建ckeditor文件夹,新建widget.html文件 - 复制django-ckeditor原生
widget.html的全部内容,将外层div的class属性值修改为你的自定义类名即可生效
内容的提问来源于stack exchange,提问作者UdoQQ
相关产品推荐
相关产品推荐

