漂亮的Django Markdown富文本app插件的实现


Posted in Python onJanuary 02, 2019

django-mdeditor

Github地址:https://github.com/pylixm/django-mdeditor 欢迎试用,star收藏!

Django-mdeditor 是基于Editor.md 的一个 django Markdown 文本编辑插件应用。

Django-mdeditor 的灵感参考自伟大的项目django-ckeditor.

功能

  • 支持 Editor.md 大部分功能
    • 支持标准的Markdown 文本、 CommonMark 和 GFM (GitHub Flavored Markdown) 文本;
    • 支持实时预览、图片上传、格式化代码、搜索替换、皮肤、多语言等。
    • 支持TOC 目录和表情;
    • 支持 TeX, 流程图、时序图等图表扩展。
  • 可自定义 Editor.md 工具栏。
  • 提供了 MDTextField 字段用来支持模型字段使用。
  • 提供了 MDTextFormField 字段用来支持 Form 和 ModelForm.
  • 提供了 MDEditorWidget 字段用来支持 admin 自定义样式使用。

快速入门

安装

pip install django-mdeditor

在 settings 配置文件 INSTALLED_APPS 中添加 mdeditor:

INSTALLED_APPS = [
    ...
    'mdeditor',
  ]

在 settings 中添加媒体文件的路径配置:

MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/media/'

在你项目根目录下创建 uploads/editor 目录,用于存放上传的图片。

在你项目的根 urls.py 中添加扩展url和媒体文件url:

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:
  # static files (images, css, javascript, etc.)
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

编写一个测试 model :

from django.db import models
from mdeditor.fields import MDTextField

class ExampleModel(models.Model):
  name = models.CharField(max_length=10)
  content = MDTextField()

向 admin.py 中注册model:

from django.contrib import admin
from . import models

admin.site.register(models.ExampleModel)

运行 python manage.py makemigrations 和 python manage.py migrate 来创建你的model 数据库表.

登录 django admin后台,点击 '添加'操作,你会看到如下界面。

漂亮的Django Markdown富文本app插件的实现

到此,你已经初步体验了 djang-mdeditor ,接下来详细看下他的其他使用吧。

用法说明

在model 中使用 Markdown 编辑字段

在model 中使用 Markdown 编辑字段,我们只需要将 model 的TextField 替换成MDTextField 即可。

from django.db import models
from mdeditor.fields import MDTextField

class ExampleModel(models.Model):
  name = models.CharField(max_length=10)
  content = MDTextField()

在后台admin中,会自动显示 markdown 的编辑富文本。

在前端 template 中使用时,可以这样用:

{% load staticfiles %}
<!DOCTYPE html>
<html lang="zh">
  <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>

在 Form 中使用 markdown 编辑字段

在 Form 中使用 markdown 编辑字段,使用 MDTextFormField 代替 forms.CharField, 如下:

from mdeditor.fields import MDTextFormField

class MDEditorForm(forms.Form):
  name = forms.CharField()
  content = MDTextFormField()

ModelForm 可自动将model 对应的字段转为 form字段, 可正常使用:

class MDEditorModleForm(forms.ModelForm):

  class Meta:
    model = ExampleModel
    fields = '__all__'

在 admin 中使用 markdown 小组件

在 admin 中使用 markdown 小组件,如下:

from django.contrib import admin
from django.db import models

# Register your models here.
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)

自定义工具栏

在 settings 中增加如下配置 :

MDEDITOR_CONFIGS = {
  'width': '90%', # 自定义编辑框宽度
  'heigth': 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_floder': 'editor', # 图片保存文件夹名称
  'theme': 'default', # 编辑框主题 ,dark / default
  'preview_theme': 'default', # 预览区域主题, dark / default
  'editor_theme': 'default', # edit区域主题,pastel-on-dark / default
  'toolbar_autofixed': True, # 工具栏是否吸顶
  'search_replace': True, # 是否开启查找替换
  'emoji': True, # 是否开启表情功能
  'tex': True, # 是否开启 tex 图表功能
  'flow_chart': True, # 是否开启流程图功能
  'sequence': True # 是否开启序列图功能
}

参考

django-ckeditor

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
Python编写登陆接口的方法
Jul 10 Python
一文总结学习Python的14张思维导图
Oct 17 Python
python spyder中读取txt为图片的方法
Apr 27 Python
python实现flappy bird小游戏
Dec 24 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
降低python版本的操作方法
Sep 11 Python
python中turtle库的简单使用教程
Nov 11 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
对Python发送带header的http请求方法详解
Jan 02 #Python
Django渲染Markdown文章目录的方法示例
Jan 02 #Python
使用python 打开文件并做匹配处理的实例
Jan 02 #Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 #Python
python之验证码生成(gvcode与captcha)
Jan 02 #Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 #Python
用xpath获取指定标签下的所有text的实例
Jan 02 #Python
You might like
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
jQuery 操作XML入门
2008/12/25 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Python新手如何理解循环加载模块
2020/05/29 Python
python 模拟登陆github的示例
2020/12/04 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
2014厂务公开实施方案
2014/02/17 职场文书
学习教师法的心得体会
2014/09/03 职场文书
法定代表人身份证明书
2014/09/10 职场文书
初中中等生评语
2014/12/29 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis