我是靠谱客的博主 闪闪鸭子,最近开发中收集的这篇文章主要介绍Django搭建强大好用的文本编辑器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介

Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuery 和 Marked 构建。需要的小伙伴可在GitHub上下载使用(https://github.com/pandao/editor.md/)。完整的demo也可以参考下面的地址:https://pandao.github.io/editor.md/examples/index.html。

下面是这款在线编辑器的特性。

  • 支持通用 Markdown / CommonMark 和 GFM (GitHub Flavored Markdown) 风格的语法,也可变身为代码编辑器;
  • 支持实时预览、图片(跨域)上传、预格式文本/代码/表格插入、代码折叠、跳转到行、搜索替换、只读模式、自定义样式主题和多语言语法高亮等功能;
  • 支持 ToC(Table of Contents)、Emoji表情、Task lists、@链接等 Markdown 扩展语法;
  • 支持 TeX 科学公式(基于 KaTeX)、流程图 Flowchart 和 时序图 Sequence Diagram;
  • 支持识别和解析 HTML 标签,并且支持自定义过滤标签及属性解析,具有可靠的安全性和几乎无限的扩展性;
  • 支持 AMD / CMD 模块化加载(支持 Require.js & Sea.js),并且支持自定义扩展插件;
  • 兼容主流的浏览器(IE8+)和 Zepto.js,且支持 iPad 等平板设备;

这款在线编辑器有一个缺点就是无法将HTML转换为markdown语法。不过在未来可能会弥补好这一点。

Django配置

  • 在github上将整个下载下来后放入django项目的static目录下

  • html页面插入下面的代码
<link rel="stylesheet" href="{% static 'plugins/markdown_editor/css/editormd.css' %}">

<div id="test-editormd"">
      <textarea name="content" style="display:none;" id="content"></textarea>
</div>
 <script src="{% static 'plugins/markdown_editor/editormd.js' %}"></script>

 <script type="text/javascript">
            var testEditor;
            
            $(function() {
                
                $.get('{% static 'plugins/markdown_editor/examples/test.md' %}', function(md){
                    testEditor = editormd("test-editormd", {
                        width: "90%",
                        height: 740,
                        path : '{% static 'plugins/markdown_editor/lib/' %}',
                        theme : "dark",
                        previewTheme : "dark",
                        editorTheme : "pastel-on-dark",
                        markdown : md,
                        codeFold : true,
                        //syncScrolling : false,
                        saveHTMLToTextarea : true,    // 保存 HTML 到 Textarea
                        searchReplace : true,
                        //watch : false,                // 关闭实时预览
                        htmlDecode : "style,script,iframe|on*",            // 开启 HTML 标签解析,为了安全性,默认不开启    
                        //toolbar  : false,             //关闭工具栏
                        //previewCodeHighlight : false, // 关闭预览 HTML 的代码块高亮,默认开启
                        emoji : true,
                        taskList : true,
                        tocm            : true,         // Using [TOCM]
                        tex : true,                   // 开启科学公式TeX语言支持,默认关闭
                        flowChart : true,             // 开启流程图支持,默认关闭
                        sequenceDiagram : true,       // 开启时序/序列图支持,默认关闭,
                        //dialogLockScreen : false,   // 设置弹出层对话框不锁屏,全局通用,默认为true
                        //dialogShowMask : false,     // 设置弹出层对话框显示透明遮罩层,全局通用,默认为true
                        //dialogDraggable : false,    // 设置弹出层对话框不可拖动,全局通用,默认为true
                        //dialogMaskOpacity : 0.4,    // 设置透明遮罩层的透明度,全局通用,默认值为0.1
                        //dialogMaskBgColor : "#000", // 设置透明遮罩层的背景颜色,全局通用,默认为#fff
                        imageUpload : true,
                        imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
                        imageUploadURL : "{% url 'admin:markdown_image_upload' %}",
                        onload : function() {
                            console.log('onload', this);
                           
                        }
                    });
                });
</script>
  • 前端代码中的imageUploadURL字段是图片上传的地址,该功能要在后端视图中自己实现。本次图片存放在fastdfs分布式文件存储系统中,关于这个查看Django搭建fastdfs。后端返回的参数可以源码中查看获取,有三个参数:success、message、url,如下图所示:

后端接收的参数名为editormd-image-file,如下图所示:

from django.http import JsonResponse
from django.conf import settings

class Markdown_Upload_image(View):
    def post(self,request):
        FDFS_Client = Fdfs_client('utils/fastdfs/client.conf')
        image_file = request.FILES.get('image_file')
        if not image_file:
            return JsonResponse({'success':0,'message':'上传图片为空'})
        if image_file.content_type not in ('image/jpeg', 'image/png', 'image/gif'):
            return JsonResponse({'success': 0, 'message': '不能上传非图片文件'})
        try:
            image_ext_name = image_file.name.split('.')[-1]
        except Exception as e:
            image_ext_name = 'jpg'
        try:
            upload_res = FDFS_Client.upload_by_buffer(image_file.read(), file_ext_name=image_ext_name)
        except Exception as e:
            return JsonResponse({'success': 0, 'message': '图片上传异常'})
        if upload_res.get('Status') != 'Upload successed.':
            return JsonResponse({'success': 0, 'message': '图片上传到服务器失败'})
        image_name = upload_res.get('Remote file_id')
        image_url = settings.FASTDFS_SERVER_DOMAIN + image_name
        return JsonResponse({'success':1,'message':'上传图片成功','url':image_url})

Editor.md的常用方法

  • testEditor.gotoLine(num);

功能是到达指定行,参数num是一个正整数。

  • testEditor.show();

显示这个在线编辑器,如果已经显示,则该方法无效。

  • testEditor.hide();

隐藏这个在线编辑器,如果已经隐藏,则该方法无效。

  • testEditor.getMarkdown();

以markdown的格式返回编辑器内的内容。可用alert()方法弹出来显示。

  • testEditor.getHTML();

以HTML的格式返回编辑器内的内容。可用alert()方法弹出来显示。

  • testEditor.watch();

开启实时预览功能。

  • testEditor.unwatch();

关闭实时预览功能。

  • testEditor.previewing();

隐藏工具栏,编辑器展示此时的文本预览的内容。(全窗口预览HTML)

  • testEditor.fullscreen();

将编辑器全屏展示,按ESC恢复。

  • testEditor.showToolbar();

显示编辑器工具栏,如果已经显示,该方法失效。

  • testEditor.hideToolbar();

隐藏编辑器工具栏,如果已经隐藏,该方法失效。

  • testEditor.config('key','value');

对testEditor的属性进行配置或修改。

 

最后

以上就是闪闪鸭子为你收集整理的Django搭建强大好用的文本编辑器的全部内容,希望文章能够帮你解决Django搭建强大好用的文本编辑器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部