【问题标题】:Filepond with Django returns empty filelist带有 Django 的 Filepond 返回空文件列表
【发布时间】:2020-05-12 04:36:42
【问题描述】:

我正在尝试将文件池与我的 Django 一起使用,但是在图像预览并将它们显示为绿色并且我看到 POST 请求后,在我打印 request.files 时单击提交我的表单后它返回一个空列表。

这是我的 Django 视图:

@login_required
def post_create(request):
    data = dict()
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():  
            post = form.save(False)
            post.author = request.user
            post.save()
            if request.FILES is not None:
                images = request.FILES.getlist('filepond')
                print(images)
                for i in images:
                    image_instance = Images.objects.create(image=i,post=post)
                    image_instance.save()
            data['form_is_valid'] = True
            data['post'] = render_to_string('home/posts/new_post.html',{'post':post},request=request)
        else:
            data['form_is_valid'] = False
    else:
        form = PostForm      
    context = {
    'form':form,
    }
    data['html_form'] = render_to_string('home/posts/post_create.html',context,request=request)
    return JsonResponse(data) 

这是我的带有脚本的 html:

<form method="POST" data-url="{% url 'home:post-create' %}" class="post-create-form" enctype="multipart/form-data">
    {% csrf_token %}
        <div class="modal-header text-center">
            <h5 class="modal-title col-12 text-center">Create a Post
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
        </h5>
        </div>
    <div class="modal-body" style="height:400px;overflow-y: auto; margin:0;">
        {{ form|crispy }}
        <div class="pt-3" style="margin-bottom: -100px !important;">
            <input type="file" class="filepond" accept="image/*">
        </div>


    </div>
    <div class="modal-footer col-12" style="margin-top: -20px;">
        <button type="submit" class="btn btn-primary"  style="border-radius: 20px; width: 100%;">Post</button>
    </div>
</form>
<script>
    $.fn.filepond.registerPlugin(
        FilePondPluginImagePreview,
        FilePondPluginImageCrop,
        FilePondPluginImageEdit,
        FilePondPluginImageEdit,
        FilePondPluginFileValidateType,
        );
    $(function () {
        var csrf_token="{{ csrf_token }}";
        $('.filepond').filepond({
            allowMultiple: true,
            className: "d-flex",
            maxFiles: 4,
            allowFileTypeValidation: true,
            acceptedFileType:['image/png', 'image/jpeg'],
            dropOnPage: true,
            server: {
            process: {
                headers: {"X-CSRFToken":csrf_token,},
                url: '/home/post/create/',
                method: 'POST',
            },
            revert: {
                headers: {
                "X-CSRFToken":csrf_token,
                },
                url: '/home/post/create/',
                method: 'DELETE',
            },
            fetch: null,
            load: null,
            },
            labelIdle: '<span class="filepond--label-action">Add Photos</span>',
            imagePreviewHeight: 250,

        });
    })
</script>

是什么导致了这个问题,因为我可以看到正在上传的文件,并且我设置了处理 POST 请求的服务器 URL 我想如何解决这个问题?我已经尝试重命名输入字段,但打印文件时 Django 中没有返回任何内容。

【问题讨论】:

    标签: javascript jquery django django-views filepond


    【解决方案1】:

    文件已上传。您不会收到另一个文件列表,您将收到一个文件 ID 数组(此端点 '/home/post/create/ 返回的 ID)。

    然后,您可以将文件从进程端点应该放置文件的临时目录移动到更最终的位置。

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 2018-12-13
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 2013-11-15
      • 2021-10-02
      • 2016-05-24
      • 2023-04-06
      相关资源
      最近更新 更多