Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django+dropzone.js:多个文件的表单验证失败_Django_Dropzone.js - Fatal编程技术网

Django+dropzone.js:多个文件的表单验证失败

Django+dropzone.js:多个文件的表单验证失败,django,dropzone.js,Django,Dropzone.js,我正在尝试使用dropzone.js在一个请求中上载多个文件。当我在dropzone中将uploadMultiple选项设置为true时,一个包含这两个文件的请求被发送到我的视图,但表单验证失败 这是我的Django表格: class UploadForm(forms.Form): data = forms.IntegerField(widget=forms.HiddenInput()) file = forms.FileField() 我的看法是: def upload(reques

我正在尝试使用dropzone.js在一个请求中上载多个文件。当我在dropzone中将uploadMultiple选项设置为true时,一个包含这两个文件的请求被发送到我的视图,但表单验证失败

这是我的Django表格:

class UploadForm(forms.Form):
  data = forms.IntegerField(widget=forms.HiddenInput())
  file = forms.FileField()
我的看法是:

def upload(request):
  if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)

    print request.FILES

    if form.is_valid():
      for file in request.FILES.getlist('file'):
        print str(file)

    else:
      print form.errors

  else:
    form = UploadForm(initial={'data': 5})

  return render(request, 'upload.html', {
    'form': form
    })
和我的模板:

<script type="text/javascript">
Dropzone.options.myAwesomeDropzone = {
  autoProcessQueue : false,
  uploadMultiple: true,

  init : function() {
    myDropzone = this;

    this.element.querySelector("input[type='submit']").addEventListener('click', function(event) {
      event.preventDefault();
      event.stopPropagation();
      myDropzone.processQueue();
    });
  }
}
</script>

<form id='my-awesome-dropzone' class="dropzone"
    action="{% url 'upload.views.upload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.data }}

<input type="submit" value="Upload" />
</form>
我想问题是Django无法识别文件[]。它需要的是文件。如何让Django识别这两次上传?

您只需执行以下操作:

file1 = request.FILES.get(file[][0], None)  # For the first file
file2 = request.FILES.get(file[][1], None)  # For the second file
。。。等等


希望能有所帮助。

假设验证错误是由发送到服务器的输入名dropzone.js引起的,您是对的。Django表单需要名为file的字段时,file[n]模式会抛出一个验证错误必填字段

在Dropzone.js中,您可以指定参数paramName,并且此对象属性也接受函数而不是简单字符串,因此如果您将paramName设置为类似以下内容:

...
paramName: function(){
    return "file";
}
...

发送到服务器的字段的名称不会更改,并且您会在request.FILES中获得一个文件字段,该字段是一个dict,其中包含一个元素文件,它是预期的文件数组。

您肯定可以进行多文件上载。我以前用dropzone和django做过,但是我现在不在办公室,所以我不能复制代码的重要方面来给你提示。我记得我是从这篇文章开始开发的:-它应该可以回答您的最后一个问题您可以在request.FILES.getlist'file[]中使用这个文件:printstrfile@furins,我已经用django模板实现了dropzone,但是图像没有在服务器端上传。你能告诉我出了什么问题吗。我也浏览了你提到的链接also@MegaBytes:您是否收到特定错误?你有一些代码,我可以看看,以便复制它?最后,请考虑打开一个新的问题,如果它与USER 223 3706中的一个或机械工具的不同。@ Furin,MultValueDeCICTKEY错误在/SaveIsVase/并且在请求中没有文件数据,是肯定的,我用代码片段来提出一个新的问题。
...
paramName: function(){
    return "file";
}
...