专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

django 使用Markdown 编辑器

编辑器官网地扯

editor官网案例

下面使用的是js加载

下载editor.md

下载地扯editor

如果上面的下载不了,可以使用个人百度云下载地扯: 链接:pan.baidu.com/s/1Cdk5SsDE… 提取码:tplb

下载完成之后,解压放到自己的django项目里的static文件夹中,并且重命名为mdeditor,如下所示:

67_1.png

配置模板

在templates模板文件中创建一个markdown.html,内容如下:

{% load staticfiles %}
<!DOCTYPE html>
<html lang="zh">
<head>
    <title>加载 Markdown 编辑器</title>
    <link rel="stylesheet" href="{% static 'mdeditor/css/editormd.css' %}"/>
</head>
<body>
<div id="test-editor">
    <textarea style="display:none;"></textarea>
</div>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="{% static 'mdeditor/editormd.min.js' %}"></script>
<script type="text/javascript">
    $(function() {
        var editor = editormd("test-editor", {
            width  : "100%",
            height : "800",
            path   : "{% static 'mdeditor/lib/' %}"
        });
    });
</script>
</body>
</html>

视图文件配置

from django.template import loader
from django.shortcuts import HttpResponse

def markdown(request):
    template = loader.get_template('markdown.html')
    return HttpResponse(template.render())

路由配置

from django.urls import path

from . import views

urlpatterns = [
    path("markdown/",views.markdown,name="markdown"),
]

运行项目并显示

python manage.py runserver

浏览器输入:http://127.0.0.1:8000/markdown/

效果图如下所示:

67_2.png

下面使用的是django-mdeditor

安装模块

建议虚拟环境下创建

pip install django-mdeditor

下载editor.md

下载地扯editor

如果上面的下载不了,可以使用个人百度云下载地扯: 链接:pan.baidu.com/s/1Cdk5SsDE… 提取码:tplb

下载完成之后,解压放到自己的django项目里的static文件夹中,并且重命名为mdeditor,如下所示:

67_3.png

注册

配置settings.py文件

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 注册
    "mdeditor",
]

配置urls.py(总路由)

该文件位于settings.py同级下的urls.py,文件内容如下:

from django.urls import path,include
from django.conf import settings

urlpatterns = [
    path('mdeditor/', include('mdeditor.urls'))
]

创建一个应用,名为app

python manage.py startapp app

应用下创建urls.py和forms.py两个文件

在该应用目录下创建一个py文件,文件名为urls.py,内容如下:

from django.urls import path

from . import views

app_name = 'app'

urlpatterns = [
    path("demo/",views.demo,name="demo"),
]

在该应用目录下创建一个forms.py,文件内容如下:

from django import forms
from mdeditor.fields import MDTextFormField

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

应用下的视图文件views.py,文件内容如下:

from django.shortcuts import render_to_response
from app.forms import MDEditorForm # 引入表单

def demo(request):
    form = MDEditorForm()
    return render_to_response('mdeditor.html', {"form": form})

配置模板

templates模板中创建mdeditor.html,mdeditor.html文件内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>django-mdeditor</title>
</head>
<body>

<form method="post" action="./" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.media }}
    {{ form.as_p }}
    <p><input type="submit" value="post"></p>
</form>

</body>
</html>

访问浏览器查看效果

67_4.png

增加图片上传配置

editor图片上传示例

后端处理注意地方

  • 获取上传的图片信息,editor.md中默认的图片参数是editormd-image-file
  • 在处理图片上传成功后的返回信息,在editor.md中要求返回json数据,格式如下:
{
    success : 0 | 1,           // 0 表示上传失败,1 表示上传成功
    message : "提示的信息,上传成功或上传失败及错误信息等。",
    url     : "图片地址"        // 上传成功时才返回
}

图片上传开始

上传文件视图

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt # 解除csrf_token验证
import os

# 下面的BASE_DIR是从项目中的settings.py文件中拿来过的
# 你也可以使用 from 项目名.settings import BASE_DIR 这个来加载
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

@csrf_exempt
def upload(request):
    obj = request.FILES.get('editormd-image-file')
    f = open(os.path.join(BASE_DIR, 'static', 'editor', obj.name), 'wb')
    for chunk in obj.chunks():
        f.write(chunk)
    f.close()
    return JsonResponse({"success": 1, "message": "上传成功", "url": "/static/editor/"+obj.name})

应用下的路由

    path("upload/",views.upload,name="upload"),

模板文件修改

主要是在原来的js上添加了如下信息:

imageUpload    : true,
imageFormats   : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
imageUploadURL : "后台post请求文件上传的URL",

imageUpload:是否开启本地上传,当设置为true时,如下图所示:

67_5.png

imageFormats:支持上传的文件类型

imageUploadURL: 文件上传的URL

如下模板信息:

{% load staticfiles %}
<!DOCTYPE html>
<html lang="zh">
<head>
    <title>加载 Markdown 编辑器</title>
    <link rel="stylesheet" href="{% static 'mdeditor/css/editormd.css' %}"/>
</head>
<body>
<div id="test-editor">
    <textarea style="display:none;"></textarea>
</div>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="{% static 'mdeditor/editormd.min.js' %}"></script>
<script type="text/javascript">
    $(function() {
        var editor = editormd("test-editor", {
            width  : "100%",
            height : "800",
            path   : "{% static 'mdeditor/lib/' %}",
            //增加图片上传配置
            imageUpload    : true,
            imageFormats   : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
            imageUploadURL : "/upload/",
        });
    });
</script>
</body>
</html>

扩展知识

文件上传重命名问题

在上面的上传视图中存在一个问题:

  • 上传的图片文件都是保存原来的文件名。

下面就来解决这个问题:

如下视图:

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import time
import uuid

@csrf_exempt
def upload(request):
    obj = request.FILES.get('editormd-image-file')
    file_name = time.strftime('%Y%m%d%H%M%S') + str(uuid.uuid1().hex) + '.' + obj.name.split('.')[-1]  # 图片文件名
    dir_path = os.path.join(BASE_DIR, 'static', 'editor') # 保存的文件目录
    img_path = os.path.join(dir_path, file_name)  # 存储的完整图片路径(绝对路径)
    f = open(img_path, 'wb')
    for chunk in obj.chunks():
        f.write(chunk)
    f.close()
    return JsonResponse({"success": 1, "message": "上传成功", "url": '/static/editor/' + file_name})

文章永久链接:https://tech.souyunku.com/46924

未经允许不得转载:搜云库技术团队 » django 使用Markdown 编辑器

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们