Как установить редактор ckeditor в django

lepiloff

July 29, 2017, 8:04 p.m.

Админка django не слишком приспособлена для добавления и редактирования статей и материалов. К счастью, есть выбор среди встраиваемых визуальных редакторов, использование которых избавит вас от многих неприятностей. В своем блоге я остановил выбор на популярном текстовом редакторе ckeditor.

Установка визуального редактора ckeditor

Первым делом установим приложение ckeditor используя стандартный способ установки приложений django:

pip install django-ckeditor

После этого необходимо внести изменения в основной файл settings.py

Добавим ckeditor и ckeditor_uploader в INSTALLED_APPS:

INSTALLED_APPS = [

'ckeditor',

'ckeditor_uploader', 

'django.contrib.admin',

...

]

Для того, что бы статические файлы нового расширения увидела система, необходимо из корневой папки сайта выполнить команду:

 ./manage.py collectstatic 

 

Пропишем путь к папкам в которых будут храниться загружаемые файлы и изображения

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

CKEDITOR_UPLOAD_PATH = "uploads/"

 

Добавим настройки редактора используемые по-умолчанию, в дальнейшем их можно изменять по своему усмотрению. Опубликованный ниже код позволяет использовать редактор максимально.

CKEDITOR_CONFIGS = {

    'default': {

     'toolbar': 'None'

    },

}

 

Переходим в  основной файл urls.py  и изменяем его, добавив в URLPATTERNS следующую строку

url(r'^ckeditor/', include('ckeditor_uploader.urls')),

 

Затем в  models.py, заменим текстовое поле модели с models.TextField() на RichTextUploadingField() и выполним импорт, добавив сверху строчку:

from ckeditor_uploader.fields import RichTextUploadingField

У меня это выглядит так:

models.py

from ckeditor_uploader.fields import RichTextUploadingField

class Post(models.Model):

    author = models.ForeignKey('auth.User')

    title = models.CharField(max_length=200)

    text = RichTextUploadingField()

Для того чтобы внесенные изменения применить к базе данных выполним

python manage.py makemigrations

python manage.py migrate

В шаблоне вывода html файла заключить выводимый объект в {% autoescape off %} {{ content.text }}{% endautoescape %}, для отключения отображения html тегов. 

В админке появляется вот такой замечательный визуальный редактор

django