django-ckeditor /

Filename Size Date modified Message
23 B
1.5 KB
109 B
2.8 KB
889 B

Django CKEditor

Django admin CKEditor integration.

Provides a RichTextField and CKEditorWidget utilizing CKEditor with image upload and browsing support included.


  1. Install or add django-ckeditor to your python path.

  2. Add ckeditor to your INSTALLED_APPS setting.

  3. Copy the media/ckeditor directory into any directory within your media root. You can override the location in your settings (see below).

  4. Add a CKEDITOR_MEDIA_PREFIX setting to the project's file. This setting specifies a URL prefix to the ckeditor JS and CSS media (not uploaded media). Make sure to use a trailing slash:

    CKEDITOR_MEDIA_PREFIX = "/media/ckeditor/"
  5. Add a CKEDITOR_UPLOAD_PATH setting to the project's file. This setting specifies an absolute path to your ckeditor media upload directory. Make sure you have write permissions for the path, i.e.:

    CKEDITOR_UPLOAD_PATH = "/home/media/"
  6. Add ckeditor url include to the project's file:

    (r'^ckeditor/', include('ckeditor.urls')),
  7. Optionally, add a CKEDITOR_UPLOAD_PREFIX setting to the project's file. This setting specifies a URL prefix to media uploaded through ckeditor, i.e.:


(If CKEDITOR_UPLOAD_PREFIX is not provided, the media URL will fall back to MEDIA_URL with the difference of MEDIA_ROOT and CKEDITOR_UPLOAD_PATH appended.)



The quickest way to add rich text editing capabilities to your models is to use the included RichTextField model field type. A CKEditor widget is rendered as the form field but in all other regards the field behaves as the standard Django TextField. For example:

from django.db import models
from ckeditor.fields import RichTextField

class Post(models.Model):
    content = RichTextField()


Alernatively you can use the included CKEditorWidget as the widget for a formfield. For example:

from django import forms
from django.contrib import admin
from ckeditor.widgets import CKEditorWidget

from post.models import Post

class PostAdminForm(forms.ModelForm):
    content = forms.CharField(widget=CKEditorWidget())
    class Meta:
        model = Post

class PostAdmin(admin.ModelAdmin):
    form = PostAdminForm, PostAdmin)



  1. Added CKEDITOR_UPLOAD_PREFIX setting. Thanks to chr15m for the input.


  1. Included README.rst in manifest.


  1. More robust PIL import, thanks Dusty Phillips.
  2. Better CKEDITOR_MEDIA_PREFIX setting error.


  1. Include resources, sorry about that.


  1. csrf_exempt backwards compatability. Thanks chr15m for the patch.