Оптимальная конфигурация CKEDITOR_CONFIGS приложения ckeditor в Django
3 марта 2014 г. 6:56
Для того чтобы сконфигурировать популярный html-редактор ckeditor под себя, нужно добавить CKEDITOR_CONFIGS
в settings.py проекта. Наиболее оптимальная настройка, которой я пользуюсь:
CKEDITOR_CONFIGS = { 'default': { 'toolbar': [ ['Undo', 'Redo', '-', 'Bold', 'Italic', 'Underline', '-', 'Link', 'Unlink', 'Anchor', '-', 'Format', '-', 'Maximize', '-', 'Table', '-', 'Image', '-', 'Source', '-', 'NumberedList', 'BulletedList' ], ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Font', 'FontSize', 'TextColor', '-', 'Outdent', 'Indent', '-', 'HorizontalRule', '-', 'Blockquote' ] ], 'height': 500, 'width': '100%', 'toolbarCanCollapse': False, 'forcePasteAsPlainText': True } }
Undo, Redo - отменить, повторить шаг
ShowBlocks - показать/скрыть блоки параграфов
Bold, Italic, Underline - сделать текст жирным, курсивным, подчёркнутым
Link, Unlink, Anchor - добавить, убрать ссылку; добавить якорь
Format - выбор формата (h1, h2 и т.д.)
Maximize - развернуть во весь экран (очень удобно:) )
Table - вставить таблицу
Image - вставить картинку
Source - переключиться в редактор исходного кода
NumberedList, BulletedList - использовать нумерованный, маркированный лист
JustifyLeft, JustifyCenter, JustifyRight, JustifyBlock - выравнивание по левому краю, центру, правому краю, по ширине блока
Font, FontSize, TextColor - изменить шрифт, его размер, и цвет текста
Outdent, Indent - отступы влево, вправо
HorizontalRule - горизонтальная линия (hr)
Blockquote - пометить блок как цитату
width, height - ширина и высота редактора
forcePasteAsPlainText - вставлять текст из других источников (например, word) как простой текст (то бишь избавляет от стороннего тег-мусора)
Использование djangocms-text-ckeditor
Я разрабатываю клиентские сайты, используя фреймворк django-cms и djangocms-text-ckeditor в качестве редактора.
Если и вы используете плагин djangocms-text-ckeditor, то конфиг может выглядеть следующим образом:
def toolbar_items(cms=True): _item = ['cmsplugins', '-', 'ShowBlocks'] if cms else ['ShowBlocks', ] return [['Undo', 'Redo'], _item, ['Format', 'Styles'], ['Bold', 'Italic', 'Underline', '-', 'Link', 'Unlink', 'Anchor', '-', 'Table', '-', 'NumberedList', 'BulletedList', '-', 'RemoveFormat'], ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'FontSize', 'TextColor', 'BGColor', '-', 'Outdent', 'Indent', '-', 'HorizontalRule', '-', 'Blockquote'], ['Find', ], ['Maximize', ], ['Source', ]] CKEDITOR_SETTINGS = { 'language': '{{ language }}', 'toolbar_CMS': toolbar_items(), 'toolbar_HTMLField': toolbar_items(False), 'skin': 'moono', 'forcePasteAsPlainText': True, 'format_tags': 'p;h1;h2;h3;pre', 'contentsCss': ['/static/my_app/css/ckeditor_init.css', ], 'stylesSet': [{'name': 'Строчный код', 'element': 'code'}, {'name': 'Скрыть для мобильных', 'element': 'span', 'attributes': {'class': 'hide_for_mobile'}}, {'name': 'Монолитный элемент', 'element': 'span', 'attributes': {'style': 'white-space: nowrap;'}}, {'name': 'Адаптивная таблица', 'element': 'div', 'attributes': {'class': 'table-responsive'}}], 'fontSize_sizes': '8/8px;9/9px;10/10px;11/11px;12/12px;13/13px;14/14px;15/15px;16/16px;17/17px;18/18px;19/19px;20/20px;' '21/21px;22/22px;23/23px;24/24px;25/25px;26/26px;27/27px;28/28px;36/36px;48/48px;72/72px;1/1px;', }
Обратите внимание, что добавляем метод toolbar_items(cms=True)
для того, чтобы использовать настройки редактора ckeditor как для поля HTMLField в models.py, так и для самого плагина djangocms-text-ckeditor. Флаг cms
в методе toolbar_items
добавляет дополнительную кнопку cms-plugins, функциональность которой реализована в djangocms-text-ckeditor.
Плюс к этому, я определил свой набор стилей stylesSet
и размеров шрифта fontSize_sizes
- стало гораздо удобнее.
В contentsCss
прописываются пути к дополнительным css стилям, которые можно подгрузить в редактор. Пример моего ckeditor_init.css:
body, select, input, textarea, button, table, a, p {font-size: 18px;} p {line-height: 26px; margin: 10px 0;} ol > li, ul > li {line-height: 23px;margin-left: 30px;} pre {display: block;background: #F0F0F0;position: relative;padding: 6px 26px 6px 6px;word-wrap: break-word;white-space:pre-wrap;margin: 16px 0;line-height: 21px;font-family: 'Courier New', cursive;font-size: 14px;} code {background: #ececec;color: #151515;font-size: 16px;} h1,h2,h3,h4,h5,h6 {font-weight: bold;margin: 16px 0 10px;} h1 {font-size: 26px;margin-top: 32px;} h2 {font-size: 23px;margin-top: 26px;} h3 {font-size: 20px;margin-top: 21px;} h4, h5, h6 {font-size: 18px;}
Ещё обратите внимание, что я намерено убрал кнопку Font, так как клиенты могут испортить дизайн сайта разными шрифтами. Хоть они и без этого могут его изрядно попортить, увеличив размеры шрифта и цвет букв и т. д. Но, как показывает практика, они так чаще всего не делают, но шрифт меняют - всё это приводит к не очень-то хорошему виду.
P.S. Более подробную информацию о найстройке редактора ckeditor можно найти здесь.
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 17
24.02.2018 6:58 #
Огромное спасибо, за статью, уже второй раз к вам на сайт попадаю, видно годное дело делаете. Уже хотел установить и настроить django-tinymce, как тут нашел адекватные настройки для ckeditor, так как не знал как его заставить подстраиваться под размер экрана благодаря вам узнал. Вопрос, а как сделать комментарии такие как у тут, что бы ограничить вывод полей, я так понимаю как-то через формы?
Ответить
26.02.2018 2:18 #
Дмитрий, рад, что статья оказалась для вас полезной!
Да, для ограничения вывода полей лучше использовать настройки класса формы. Вот реальный пример моей формы для этого сайта:
widget=forms.HiddenInput()
- определяет тип input-а скрытым (поэтому остаётся видимым только полеname
иmessage
).В шаблоне вывожу так:
За основу системы комментирования взял http://larin.in/archives/74 и доделал под свои нужды.
Ответить
01.09.2020 4:23 #
Добрый день.
Спасибо за твои статьи.
Не подскажешь как сделать поле не обязательным?
В модели стоит все нормально
detail = models.TextField(blank=True, verbose_name='Описание')
когда добавляю CKEditor
detail = forms.CharField(label='Описание', blank=True, widget=CKEditorUploadingWidget())
ставлю blank=True ругается
сюда ставлю тоже ругается
detail = forms.CharField(label='Описание', widget=CKEditorUploadingWidget(blank=True))
Ответить
02.09.2020 4:12 #
Константин, добрый день!
Не знаю, почему ему не нравится. По идее должен работать. Нужно дебажить метод
save()
иclean()
в формеОтветить
02.09.2020 9:01 #
Спасибо . Я уже изменил на RichTextUploadingField с ним работает нормально )
Ответить
02.09.2020 12:15 #
О, это хорошо, что получилось! И другим полезно будет узнать :)
Ответить
24.03.2021 20:06 #
На вопрос Константина : Чтобы поле можно было оставлять пустым надо написать та к detail = forms.CharField(label='Описание', empty_value=True, widget=CKEditorUploadingWidget())
Ответить
24.03.2021 20:19 #
Сорри, в предыдущем комменте не тот параметр указал (empty_value='какой-то текст ' - ставит в поля текст, указанный в кавычках, по умолчанию), если же надо чтобы поле было не обязательно к заполнению - ставим required=False : detail = forms.CharField(label='Описание', required=False, widget=CKEditorUploadingWidget())
Ответить
26.03.2021 7:24 #
Да-да, кстати,
required=False
делает необязательным поле. Спасибо, Pavel, за ответ!Ответить
31.01.2022 9:55 #
Как изменить цвет шрифта в режиме просмотра html кода? В данный момент фон белый, а шрифт светло серый и его практически не видно
Ответить
04.02.2022 4:49 #
Здесь нужно переопределить цвет шрифта. Здесь можно посмотреть как добавить свои стили в админку https://vivazzi.pro/ru/it/add-style-to-admin-django/ (правда это очень старая и незаконченная статья, но главное, что можно смысл понять, что нужно сделать)
А сам стиль будет, например, такой:
Ответить
06.02.2022 0:10 #
Я менял этот стиль, но при включении просмотра исходного (html) кода он влияния не оказывает :(
Ответить
06.02.2022 12:53 #
А этот стиль вообще загружается? сам файл загружается? И через инструменты разработчика хром можно посмотреть, почему не применяется
Ответить
07.02.2022 10:11 #
у меня сложилось впечатление, что через js как-то меняется фон
Ответить
07.02.2022 16:18 #
Может быть и так. Может от версии ckeditor зависит, хотя сомневаюсь
Ответить
24.07.2024 12:18 #
Спасибо за хорошее описание. Подскажите, пожалуйста, можно ли как-то в конфиге указать список разрешенных форматов заголовков (h1, p) не используя djangocms-text-ckeditor?
Ответить
24.07.2024 12:34 #
Разобрался, указав
'format_tags': 'h1;p'
Ответить