from typing import Any from django import forms from django.forms.renderers import BaseRenderer from django.utils.safestring import mark_safe class MarkdownEditorWidget(forms.Textarea): class Media: css = {"all": ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.css",)} js = ("https://cdnjs.cloudflare.com/ajax/libs/easymde/2.14.0/easymde.min.js",) def render(self, name: str, value: str, attrs: dict[Any, Any] | None = None, renderer: BaseRenderer | None = None): if not attrs: attrs = {} attrs["class"] = "markdown-editor" textarea_html = super().render(name, value, attrs, renderer) textarea_id = attrs.get("id", f"id_{name}") init_js = f""" """ # noinspection DjangoSafeString return mark_safe(textarea_html + init_js)