Dropzone表格处理不当

时间:2017-04-21 11:57:18

标签: javascript html django forms dropzone.js

我有一个小的django应用程序:用户上传文件,在服务器端修改文件,修改后的文件作为下载发送回用户。 为了提供一个漂亮的拖放文件上传表单,我使用dropzone.js。表单包含其他输入元素,因此我遵循此howto。提交表单后,django视图返回一个HttpResponse对象:

response = HttpResponse(f.read(), content_type="application/pdf")
response['Content-Disposition'] = 'attachment; filename="%s"' % input_file

我的问题是:如果我使用基于dropzone的表单,则不会显示响应,即浏览器不会显示下载对话框。

以下是我的html文件的最小示例:

<form method="post" class="dropzone" action="/mysite/" enctype="multipart/form-data" id="myForm">
    {% csrf_token %}
    <select name="selectpdf" size="1">
    // filled by django magic
    </select>
    <p><button type="submit">Do it!</button></p>
 </form>

<script type="text/javascript">
    Dropzone.options.myForm = {
        // Prevents Dropzone from uploading dropped files immediately
        autoProcessQueue : false,
        forceFallback : false,

        init : function() {
            myDropzone = this;

            this.element.querySelector("button[type=submit]").addEventListener("click", function(e) {
                // Make sure that the form isn't actually being sent.
                e.preventDefault();
                e.stopPropagation();
                myDropzone.processQueue();
            });
        }
    };
</script>

当我使用常规HTML表单(即没有class="dropzone"并使用标准文件上传字段)时,一切都很完美。另外,如果我激活了dropzones后备模式(基本上也是如此),一切都很好。因此,我认为问题与django部分无关。

按下提交按钮后,我发现myDropzone.processQueue();已正确执行(因为文件已上传),并且已在服务器端正确处理上传的文件(即文件已修改且相应生成并返回HttpResponse)。但是,客户从未见过它。我还观察到,表单似乎处于错误的状态,因为如果我再次点击提交按钮,则没有任何反应。

对我来说,似乎缺少一些基于JavaScript的客户端最终重定向,这在使用纯HTML方法时是隐式完成的。

根据howto,我可以捕捉到某些事件,例如

this.on("success", function(files, response) { ... }

为了重定向用户。但实际上我并不想重定向他,我想要与纯HTML方法相同的行为(即,留在网站上,填写表格,提供下载并能够点击提交按钮再次)。

有人可以帮忙吗?

0 个答案:

没有答案