Здравствуйте, в прошлый раз здесь мы писали о другом редакторе WYSIWYG под названием Django-summernote, но сегодня мы кратко рассмотрим Django CKEditor.

Но прежде всего давайте поговорим о них обоих и сравним их друг с другом:

Django CKEditor:

Это приложение Django, которое является оболочкой для текстового редактора JavaScript CKEditor. Он предоставляет простой в использовании интерфейс для написания форматированного текстового контента и очень популярен благодаря своему обширному набору функций, который включает форматирование текста, загрузку изображений, проверку орфографии и многое другое. Он также предоставляет поле формы Django и виджет, который можно использовать в администраторе Django или с другими системами форм.

Django-summernote:

Это приложение Django, которое является оболочкой для текстового редактора Summernote JavaScript. Summernote — более простой редактор форматированного текста по сравнению с CKEditor. Он легче и имеет более современный пользовательский интерфейс. Он также предоставляет такие возможности, как форматирование текста, загрузка изображений и т. д., но его набор функций не так обширен, как у CKEditor.

Выбор между этими двумя вариантами во многом зависит от ваших конкретных требований. Если вам нужны более продвинутые функции и вы не возражаете против сложности, вы можете предпочесть Django CKEditor. Если вы предпочитаете более легкий и простой интерфейс, вы можете предпочесть django-summernote. Вы также должны учитывать документацию, поддержку сообщества и совместимость с вашей версией Django и другими плагинами при выборе между этими двумя.

Давайте установим его!

Процесс установки Django CKEditor очень прост — прежде всего установите библиотеку:

pip install django-ckeditor

модели.py

from django.db import models
from django.utils.text import slugify
from django.urls import reverse
from ckeditor.fields import RichTextField  # Import from ckeditor

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = RichTextField(null=True)  # Use RichTextField from ckeditor
    pub_date = models.DateTimeField('date published')
    image = models.ImageField(upload_to='images/', null=True, blank=True)

    def __str__(self):
        return self.title

class Editorial(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    thumbnail = models.ImageField(upload_to='images/', null=True, blank=True)
    content = RichTextField(null=True)  # Use RichTextField from ckeditor

    def save(self, *args, **kwargs):
        if not self.slug:
            potential_slug = slugify(self.title)
            if Editorial.objects.filter(slug=potential_slug).exists():
                i = 1
                while Editorial.objects.filter(slug=potential_slug + '-' + str(i)).exists():
                    i += 1
                self.slug = potential_slug + '-' + str(i)
            else:
                self.slug = potential_slug
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('editorial', args=[str(self.slug)])

    def __str__(self):
        return self.title

Как вы можете видеть выше, я должен импортировать:

from ckeditor.fields import RichTextField  # Import from ckeditor

и измените «контент» в «Статьях» и «Редакциях»:

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = RichTextField(null=True)  # <-- here
    pub_date = models.DateTimeField('date published')
    image = models.ImageField(upload_to='images/', null=True, blank=True)

    def __str__(self):
        return self.title

class Editorial(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    thumbnail = models.ImageField(upload_to='images/', null=True, blank=True)
    content = RichTextField(null=True)  # <-- here
    title = models.CharField(max_length=200)
    content = RichTextField(null=True)  # Use RichTextField from ckeditor
    pub_date = models.DateTimeField('date published')
    image = models.ImageField(upload_to='images/', null=True, blank=True)

    def __str__(self):
        return self.title

class Editorial(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    thumbnail = models.ImageField(upload_to='images/', null=True, blank=True)
    content = RichTextField(null=True)  # Use RichTextField from ckeditor
content = RichTextField(null=True)  # <-- here

Теперь, когда мы изменили «models.py», давайте изменим «urls.py»:

URL.py

from django.contrib import admin
from django.urls import include, path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
    path('editorial/<slug:slug>/', views.editorial, name='editorial'),
    path('ckeditor/', include('ckeditor_uploader.urls')),  # Use ckeditor URLs
]

как видите мы добавляем:

path('ckeditor/', include('ckeditor_uploader.urls')),  # Use ckeditor URLs

Это круто! теперь давайте реализуем нашу библиотеку в settings.py:

Точно так же, как это выше! но это не конец изменений settings.py:

CKEDITOR_UPLOAD_PATH = "uploads/"

Хорошо, последнее — отредактировать «admin.py»:

from django.contrib import admin
from django.db import models  # Import models from django
from .models import Editorial
from ckeditor.widgets import CKEditorWidget  # Import from ckeditor

class EditorialAdmin(admin.ModelAdmin):  # Use the regular ModelAdmin
    formfield_overrides = {
        models.TextField: {'widget': CKEditorWidget},
    }

admin.site.register(Editorial, EditorialAdmin)

давайте все проверим!

Хорошо, не давайте проверим результаты!

Как видите, проблема есть. Практически совсем не читает нам пробелы между текстом и т.д. Это нужно исправить. Как это сделать?

это просто!

Измените эту строку в editorials.html:

от:

к этому:

мы добавили ‘|safe

результаты:

Это все братцы!

# немного саморекламы

Привет! Меня зовут Дориан, и я управляю небольшой компанией по разработке программного обеспечения. Мое предложение для вас.

— Интернет-магазины и сайты
— Веб и мобильные приложения
— Компьютерная графика
— Автоматизация процессов
— Боты, API и инфраструктура
— Брендинг
> — Внедрение искусственного интеллекта (ИИ)
— Плагины WordPress и PrestaShop и др.
— Смарт-контракты / Запуск собственной криптовалюты / NFT.
— Внедрение технологии WEB3 / Блокчейн в бизнесе.

Вы хотите создать свой собственный криптопроект на основе какого-либо приложения или просто хотите создать свою криптовалюту или NFT?
Хотите внедрить технологии WEB3 и блокчейн в свой бизнес?

— Веб-сайт: www.travilabs.com
Свяжитесь с нами:
Facebook: https://www.facebook.com/profile. php?id=100091601081883
Электронная почта: [email protected]