CKEditor 5 for Django.
Project description
CKEditor 5 for Django >= 2.0
Quick start
pip install django-ckeditor-5
Add “django_ckeditor_5” to your INSTALLED_APPS in your project/settings.py like this:
INSTALLED_APPS = [ ... 'django_ckeditor_5', ]
Also, in your project/settings.py add:
STATIC_URL = '/static/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') customColorPalette = [ { 'color': 'hsl(4, 90%, 58%)', 'label': 'Red' }, { 'color': 'hsl(340, 82%, 52%)', 'label': 'Pink' }, { 'color': 'hsl(291, 64%, 42%)', 'label': 'Purple' }, { 'color': 'hsl(262, 52%, 47%)', 'label': 'Deep Purple' }, { 'color': 'hsl(231, 48%, 48%)', 'label': 'Indigo' }, { 'color': 'hsl(207, 90%, 54%)', 'label': 'Blue' }, ] CKEDITOR_5_CUSTOM_CSS = 'path_to.css' # optional CKEDITOR_5_FILE_STORAGE = "path_to_storage.CustomStorage" # optional CKEDITOR_5_CONFIGS = { 'default': { 'toolbar': ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote', 'imageUpload', ], }, 'extends': { 'blockToolbar': [ 'paragraph', 'heading1', 'heading2', 'heading3', '|', 'bulletedList', 'numberedList', '|', 'blockQuote', ], 'toolbar': ['heading', '|', 'outdent', 'indent', '|', 'bold', 'italic', 'link', 'underline', 'strikethrough', 'code','subscript', 'superscript', 'highlight', '|', 'codeBlock', 'sourceEditing', 'insertImage', 'bulletedList', 'numberedList', 'todoList', '|', 'blockQuote', 'imageUpload', '|', 'fontSize', 'fontFamily', 'fontColor', 'fontBackgroundColor', 'mediaEmbed', 'removeFormat', 'insertTable',], 'image': { 'toolbar': ['imageTextAlternative', '|', 'imageStyle:alignLeft', 'imageStyle:alignRight', 'imageStyle:alignCenter', 'imageStyle:side', '|'], 'styles': [ 'full', 'side', 'alignLeft', 'alignRight', 'alignCenter', ] }, 'table': { 'contentToolbar': [ 'tableColumn', 'tableRow', 'mergeTableCells', 'tableProperties', 'tableCellProperties' ], 'tableProperties': { 'borderColors': customColorPalette, 'backgroundColors': customColorPalette }, 'tableCellProperties': { 'borderColors': customColorPalette, 'backgroundColors': customColorPalette } }, 'heading' : { 'options': [ { 'model': 'paragraph', 'title': 'Paragraph', 'class': 'ck-heading_paragraph' }, { 'model': 'heading1', 'view': 'h1', 'title': 'Heading 1', 'class': 'ck-heading_heading1' }, { 'model': 'heading2', 'view': 'h2', 'title': 'Heading 2', 'class': 'ck-heading_heading2' }, { 'model': 'heading3', 'view': 'h3', 'title': 'Heading 3', 'class': 'ck-heading_heading3' } ] } }, 'list': { 'properties': { 'styles': 'true', 'startIndex': 'true', 'reversed': 'true', } } }
Include the app URLconf in your project/urls.py like this:
from django.conf import settings from django.conf.urls.static import static # [ ... ] urlpatterns += [ path("ckeditor5/", include('django_ckeditor_5.urls'), name="ck_editor_5_upload_file"), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Add to your project/models.py:
from django.db import models from django_ckeditor_5.fields import CKEditor5Field class Article(models.Model): title=models.CharField('Title', max_length=200) text=CKEditor5Field('Text', config_name='extends')
Includes the following ckeditor5 plugins:
Essentials, UploadAdapter, CodeBlock, Autoformat, Bold, Italic, Underline, Strikethrough, Code, Subscript, Superscript, BlockQuote, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageResize, Link, List, Paragraph, Alignment, Font, PasteFromOffice, SimpleUploadAdapter, MediaEmbed, RemoveFormat, Table, TableToolbar, TableCaption, TableProperties, TableCellProperties, Indent, IndentBlock, Highlight, TodoList, ListProperties, SourceEditing, GeneralHtmlSupport, ImageInsert, WordCount, Mention, Style, HorizontalLine, LinkImage, HtmlEmbed
Examples
Example of using a widget in a form:
from django import forms from django_ckeditor_5.widgets import CKEditor5Widget from .models import Comment class CommentForm(forms.ModelForm): """Form for comments to the article.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["text"].required = False class Meta: model = Comment fields = ("author", "text") widgets = { "text": CKEditor5Widget( attrs={"class": "django_ckeditor_5"}, config_name="comment" ) }
Custom storage example:
import os from urllib.parse import urljoin from django.conf import settings from django.core.files.storage import FileSystemStorage class CustomStorage(FileSystemStorage): """Custom storage for django_ckeditor_5 images.""" location = os.path.join(settings.MEDIA_ROOT, "django_ckeditor_5") base_url = urljoin(settings.MEDIA_URL, "django_ckeditor_5/")
Changing the language:
You can change the language via the language key in the config
CKEDITOR_5_CONFIGS = { 'default': { 'toolbar': ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote', 'imageUpload', ], 'language': 'de', },
language can be either:
a string containing a single language
a list of languages
a dict {"ui": <a string (1) or a list of languages (2)>}
If you want the language to change with the user language in django you can add CKEDITOR_5_USER_LANGUAGE=True to your django settings. Additionally you will have to list all available languages in the ckeditor config as shown above.
Installing from GitHub:
cd your_root_project git clone https://github.com/hvlads/django-ckeditor-5.git cd django-ckeditor-5 yarn install yarn run prod cd your_root_project python manage.py collectstatic
Example Sharing content styles between front-end and back-end:
To apply ckeditor5 styling outside of the editor, download content.styles.css from the official ckeditor5 docs and include it as a styleshet within your HTML template. You will need to add the ck-content class to the container of your content for the styles to be applied. https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html#sharing-content-styles-between-frontend-and-backend
<link rel="stylesheet" href="path/to/assets/content-styles.css" type="text/css">
...
<div class="ck-content">
<p>ckeditor content</p>
</div>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django-ckeditor-5-0.2.12.tar.gz.
File metadata
- Download URL: django-ckeditor-5-0.2.12.tar.gz
- Upload date:
- Size: 2.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7165f3736f3d29dddaeda09c175903bdf3cf2b3f376c46aa5be2cc30c2c4e97
|
|
| MD5 |
53abceb50159dcf10b7a287a7c4fc527
|
|
| BLAKE2b-256 |
79677bf598beb4b7aaa02a15c072098e918b0dc44a6f33bca4dc871474d36572
|
File details
Details for the file django_ckeditor_5-0.2.12-py3-none-any.whl.
File metadata
- Download URL: django_ckeditor_5-0.2.12-py3-none-any.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f32cf1ce6e498d114baed8eda4b81526d61f55b55ee67ed985c26714365344e5
|
|
| MD5 |
a397dac1c1cef1d1accd04dab3ac5b8f
|
|
| BLAKE2b-256 |
b0c422e7991cd1f97c3da00e687c1ab0868fac4520b7a9848cdb1e3261d94e86
|