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

2022/6/4 23:20:29

本文主要是介绍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',
                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

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



这篇关于Django使用editor实现基本使用,包括本地上传图片问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程