Обзор markdown редакторов для Django

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Цель:

Подобрать удобный инструмент, для работы с markdown из Django админки, без лишних танцев с бубном.

Несколько условий:

  • Комфортный предпросмотра результата разметки.

  • Возможность подгрузки (upload) изображений прямо из редактора.

  • Поддержка DefaultStorage, что бы можно было использовать интеграцию с django-storages.

  • Комфортная работа в редакторе + вменяемый внешний вид.

На djangopackages мне приглянулись 2 библиотеки:

  • dracos-markdown-editor и django-markdown-editor - это один и тот же проект martor.

  • django-markdownx

Поискав по закоулкам JavaScript, нашёл несколько markdown редакторов и через них вышел на интеграции в Django, но под наши требования подошли не все, рассмотрим один из них.

  • django-mdeditor

Для удобства я создал репозиторий с Django проектом, где все эти редакторы подключены к админке.

Приступим:

martor

Ссылка на репозиторий: https://github.com/agusmakmun/django-markdown-editor

Реализован на базе Ace Editor

Плюсы

  • Имеет достаточно симпатичный (2 темы на выбор) и удобный интерфейс.

  • Удобные "фишки" по типу: обрамления скобками выделенного текста, автозакрытие скобок, автоподстановка символов при наборе списков.

  • Поддерживает хоткеи.

  • Вставка изображений как через default_storage (что позволяет интегрироваться с django-storage), так и автоматическая выгрузка в imgur.com, без использования собственного хранилища.

  • Частые обновления

Минусы

  • Возможность переключения между preview/editor только в шапке, что не особо удобно, если много контента.

  • Нет поддержки side-by-side, можно указать в настройках 'living': 'true', но это не так удобно, т.к. live preview отображается снизу и если много контента, то приходится постонно скроллить к "вверх/вниз".

  • На момент написания статьи, была проблема с XSS в ссылках, учтите это, если захотите использовать редактор за пределами админки и доверенных пользователей.

  • Большинство настроек по изображениям - захардкожено в контроллере, можно вынести в настройки самостоятельно, но из коробки это не предусмотрено.

django-markdownx

Ссылка на репозиторий: https://github.com/neutronX/django-markdownx

Это не совсем полноценный редактор, скорее плагин для создания своих темплейтов и форм, но при необходимости, его можно использовать и в панели администратора.
Т.ж. обращаю внимание, что на момент выхода статьи, релизная версия библиотеки не поддерживает Django >= 4, можете использовать beta версию, либо сами переопределите у себя пару классов (пример тут)

Плюсы

  • Поддержка drag & drop для подгрузки изображений.

  • Настройки для подгружаемых изображение (размер, компрессия, кроппинг и т.д.).

Минусы

  • Ужасный базовый виджет в админке, неудобно как читать, так и писать. Может я не до конца раскурил как его использовать и необходимы дополнительные плагины или создание кастомного темплейта, но "по умолчанию" это выглядит плохо.

  • Редкие обновления

  • Скудная документация и описание

django-mdeditor

Ссылка на репозиторий: https://github.com/pylixm/django-mdeditor

Реализован на базе Editor.md.

Плюсы

  • Всевозможные реализации preview, тут есть и side-by-sibe, возможность выбрать режим только editor или preview, полноэкранный режим.

  • Вспомогательные функции, такие как: помощь при создании табличек, автозакрытие скобок, автосохранение (при переходе на другую страницу без сохранения, можно вернуться и вы не потеряете уже набранный текст, что очень полезно) и т.д..

  • Дополнительные параметры конфигурации.

Минусы

  • При использовании кнопок, которые вызывают модальные окна, происходит прокрутка страницы в начало, странное поведение.

  • Стандартная реализация подгрузки изображений выполнена "странно", там используется своя реализация с os.makedirs() & file.write(), что мешает интеграции с такими батарейками, как django-storages, я закинул PR с исправлениями к ним в репозиторий, но хз, примут или нет. Можете глянуть реализацию, которая сработала для меня тут

Подведем итоги:

Мы рассмотрели несколько готовых интеграций, которые могут удовлетворить наши потребности.

martor

django-markdownx

django-mdeditor

preview результата

Хорошее качество предпросмотра, но отсутствие side-by-side немного напрягает

В конфигурации "по умолчанию" ужасен

Хорошо - всё. Удобный предпросмотр и несколько вариантов на выбор.

upload изображений

Обычная подгрузка + доступна выгрузка в imgur.com "из коробки"

Единственный вариант в котором доступен drag & drop, возможность конфигурации компрессии, кроппинга и т.д.

Обычная подгрузка, возможность настройки

поддержка DefaultStorage

+

+ (через form.save())

- (необходимо вносить правка)

UI/UX

Хорошо - присутствует возможность выбрать тему, наличие хоткеев.

Плохо - насколько я понял, тут необходимо писать свои реализации.

Хорошо - богатый набор коткеев и помощников, автосохранение. Впечатление немного портят прыжки при вызове модалок.

Конечно есть ещё вариант - выбрать понравившийся редактор, допустим SimpleMDE или его поддерживаемый форк EasyMDE (в нём кстати уже есть подгрузка изображений) и собрать свою интеграцию с необходимым функционалом, но тогда поддержка всего этого, ложится на вас.

Я был удивлён, что отсутствует какое-то ультимативное решение, как например django-ckeditor для WYSIWYG редакторов.

Поэтому тут каждый должен решать, что ему необходимо под конкретный кейс, я по итогу остановился на django-mdeditor.

Надеюсь, обзор поможет немного сэкономить ваше время, если перед вами будет стоять подобная задача.

PS

В репозитории вы можете сами "потыкать" различные редакторы и их конфигурации.

Источник: https://habr.com/ru/post/689106/


Интересные статьи

Интересные статьи

Привет, Хабр!Меня зовут Оксана и я – руководитель продуктовой команды в компании TrueConf. Мы разрабатываем софт для видеосвязи и совместной работы уже больше 10 лет. Сегодня я расскажу о создани...
3D-сканер peel 2 CAD-S – долгожданное пополнение в линейке peel 3d. По сравнению со своим предшественником peel 2 устройство может похвастаться более высокой детализацией при сканировании не...
Прошло время, когда контроль сетевой активности пользователей ограничивался только на уровне конечных рабочих станций, с помощью корпоративного прокси-сервера и межсетево...
После нашей публикации о трехмерной визуализации некоторые читатели обратились с вопросами о технической составляющей 3D-обзоров. В силу того, что у меня было недостаточно данных для отве...
Однажды по-работе у меня возникла задача сделать исследование рынка существующих веб-плееров, которые можно было бы взять для нашего нового модного проекта. В процессе сформировалось это сравнени...