漂亮的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 相关文章推荐
Python+PIL实现支付宝AR红包
Feb 09 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
如何通过python的fabric包完成代码上传部署
Jul 29 Python
django foreignkey(外键)的实现
Jul 29 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
利用python对mysql表做全局模糊搜索并分页实例
Jul 12 Python
记一次django内存异常排查及解决方法
Aug 07 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
Python爬虫爬取有道实现翻译功能
Nov 27 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图片验证码制作实现分享(全)
2012/05/10 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
Javascript 作用域使用说明
2009/08/13 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
python3写爬取B站视频弹幕功能
2017/12/22 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
经济学博士求职自荐信范文
2013/11/23 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
业务员管理制度范本
2015/08/06 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB