Django使用editor实现基本使用,包括本地上传图片问题
Django使用editor实现基本使用,包括本地上传图片问题
可以直接在这里下载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自己导入过就不需要再导入了'''
html
<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>
js
<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',
onload: function () {
console.log('onload', this);
},
});
});
</script>
views.py
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的报错问题
往提交图片的表单中添加csrf_token的input隐藏字段
具体实现: 修改插件包下的plugins/image-dialog/image-dialog.js文件
在var dialogContent=(****)前面添加下面代码
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);
在上图画红圈的地方,加上红圈内的代码