django-mdeditor
Django-mdeditor is Markdown Editor plugin application for django base on Editor.md.
Django-mdeditor was inspired by great django-ckeditor.
Note:
- For Markdown page rendering issues, backend rendering is recommended. Because
Editor.md
has not been updated for a long time, some bugs and compatibility issues need to be debugged. Of course, front-end students can choose. - Regarding the
Jquery
conflict, it cannot be deleted because it is required by the admin backend. It is recommended to separate the editing page on a single page or a full screen directly, using its own static file to distinguish it from other pages.
Features
- Almost Editor.md features
- Support Standard Markdown / CommonMark and GFM (GitHub Flavored Markdown);
- Full-featured: Real-time Preview, Image (cross-domain) upload, Preformatted text/Code blocks/Tables insert, Search replace, Themes, Multi-languages;
- Markdown Extras : Support ToC (Table of Contents), Emoji;
- Support TeX (LaTeX expressions, Based on KaTeX), Flowchart and Sequence Diagram of Markdown extended syntax;
- Can constom Editor.md toolbar
- The MDTextField field is provided for the model and can be displayed directly in the django admin.
- The MDTextFormField is provided for the Form and ModelForm.
- The MDEditorWidget is provided for the Admin custom widget.
Quick start
pipenv install django-mdeditor
pip install django-mdeditor
- Add
mdeditor
to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [
...
'mdeditor',
]
- add frame settings for django3.0+ like this:
X_FRAME_OPTIONS = 'SAMEORIGIN'
- Add 'media' url to your settings like this:
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/media/'
Make folder uploads/editor
in you project for media files.
- Add url to your urls like this:
from django.conf.urls import url, include
from django.conf.urls.static import static
from django.conf import settings
...
urlpatterns = [
...
url(r'mdeditor/', include('mdeditor.urls'))
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- Write your models like this:
from django.db import models
from mdeditor.fields import MDTextField
class ExampleModel(models.Model):
name = models.CharField(max_length=10)
content = MDTextField()
-
Register your model in admin.py
-
Run python manage.py makemigrations
and python manage.py migrate
to create your models.
-
Login Admin ,you can see a markdown editor text field like this:
Usage
Edit fields in the model using Markdown
Using Markdown to edit the fields in the model, we simply replace the TextField
of the model with MDTextField
.
from django.db import models
from mdeditor.fields import MDTextField
class ExampleModel (models.Model):
name = models.CharField (max_length = 10)
content = MDTextField ()
Admin in the background, will automatically display markdown edit rich text.
Used in front-end template, you can use like this:
{% load staticfiles %}
<! DOCTYPE html>
<html lang = "en">
<head>
<meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" />
</ head>
<body>
<form method = "post" action = "./">
{% csrf_token %}
{{ form.media }}
{{ form.as_p }}
<p> <input type = "submit" value = "post"> </ p>
</ form>
</ body>
</ html>
Edit fields in the Form using markdown
Use markdown to edit fields in the Form, use MDTextFormField
instead of forms.CharField
, as follows:
from mdeditor.fields import MDTextFormField
class MDEditorForm (forms.Form):
name = forms.CharField ()
content = MDTextFormField ()
ModelForm
can automatically convert the corresponding model field to the form field, which can be used normally:
class MDEditorModleForm (forms.ModelForm):
class Meta:
model = ExampleModel
fields = '__all__'
Use the markdown widget in admin
Use the markdown widget in admin like as :
from django.contrib import admin
from django.db import models
from. import models as demo_models
from mdeditor.widgets import MDEditorWidget
class ExampleModelAdmin (admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': MDEditorWidget}
}
admin.site.register (demo_models.ExampleModel, ExampleModelAdmin)
Customize the toolbar
Add the following configuration to settings
:
MDEDITOR_CONFIGS = {
'default':{
'width': '90% ',
'height': 500,
'toolbar': ["undo", "redo", "|",
"bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|",
"h1", "h2", "h3", "h5", "h6", "|",
"list-ul", "list-ol", "hr", "|",
"link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime",
"emoji", "html-entities", "pagebreak", "goto-line", "|",
"help", "info",
"||", "preview", "watch", "fullscreen"],
'upload_image_formats': ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
'image_folder': 'editor',
'theme': 'default',
'preview_theme': 'default',
'editor_theme': 'default',
'toolbar_autofixed': True,
'search_replace': True,
'emoji': True,
'tex': True,
'flow_chart': True,
'sequence': True,
'watch': True,
'lineWrapping': False,
'lineNumbers': False,
'language': 'zh'
}
}
Feedback
Welcome to use and feedback!
You can create a issue or join in QQ Group.
Reference