ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django使用editor实现基本使用,包括本地上传图片问题

2022-06-04 21:00:38  阅读:154  来源: 互联网

标签:back Django dict editor file path article 上传


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',
                onl oad: 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);

image-20220604204922665

在上图画红圈的地方,加上红圈内的代码

标签:back,Django,dict,editor,file,path,article,上传
来源: https://www.cnblogs.com/zhengkaijian/p/16342735.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有