可以直接在这里下载editor
https://files.cnblogs.com/files/blogs/737880/test.zip?t=1654347284
参考博客
# 需要导入的文件: <link rel="stylesheet" href="/static/editormd/css/editormd.css"/> <script src="/static/editormd/editormd.min.js"></script> <script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> '''jqery自己导入过就不需要再导入了'''
<form action="/add_article/" method="post"> {% csrf_token %} <p><span>标题</span></p> <input type="text" name="title" class="form-control"> <p class="article-color">内容</p> <div id="my-editormd"> <textarea class="editormd-markdown-textarea" name="doc" style="display:none;"></textarea> <!-- 第二个隐藏文本域,用来构造生成的HTML代码,方便表单POST提交,这里的name可以任意取,后台接受时以这个name键为准 --> <textarea class="editormd-html-textarea" name="html"></textarea> </div> </form> </div>
<script src="/static/editormd/editormd.min.js"></script> <script type="text/javascript"> let testEditor; $(function () { testEditor = editormd("my-editormd", { width: "100%", height: 640, syncScrolling: "single", path: "/static/editormd/lib/", //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。 saveHTMLToTextarea : true, imageUpload: true, imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"], imageUploadURL: "{% url 'file_upload_view' %}", 'success':1|0 , 'message': '成功以后的信息', 'url':'media/article', onl oad: function () { console.log('onload', this); }, }); }); </script>
back_dict = { 'success': 1, 'message': '成功' } if request.method == 'POST': # 获取文件对象 article_file_obj = request.FILES.get('editormd-image-file') # 文章上传的图片算用户上传的静态资源,可以考虑存放到media内部 article_package_path = os.path.join(settings.BASE_DIR, 'media', 'article') # 判断路径是否存在,不存在自动创建 if not os.path.exists(article_package_path): os.mkdir(article_package_path) # 拼接完整路径并存储 article_file_path = os.path.join(article_package_path, article_file_obj.name) with open(article_file_path, 'wb') as f: for line in article_file_obj: f.write(line) # 拼接返回给前端的字典 # back_dict['url'] = article_file_path # 不行,这是个绝对路径 back_dict['url'] = '/media/article/%s' % article_file_obj.name print(back_dict) return JsonResponse(back_dict)
主要展示了实现上传图片的功能,其他功能按自己需求来写
往提交图片的表单中添加csrf_token的input隐藏字段 具体实现: 修改插件包下的plugins/image-dialog/image-dialog.js文件
function getCookie(name) { let r = document.cookie.match("\\b" + name + "=([^;]*)\\b"); return r ? r[1] : undefined; } let csrf_token_value = getCookie("csrftoken"); let csrfField = "<input class=\"hidden\" type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"" + csrf_token_value + "\"/>"; // console.log(csrfField);
在上图画红圈的地方,加上红圈内的代码