如何在Django中处理多个文件字段。例如,如果我只有一个表单字段,我会将request.FILES ['file']传递给处理函数。但是当有更多文件时,该怎么办?
答案 0 :(得分:31)
我迟到了,但我一直试图弄清楚这一点,最后有一个解决方案。 看看这里使用的代码:https://code.djangoproject.com/ticket/12446
您可以使用getlist访问多部分值。如果我的HTML表单是:
<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="myfiles" multiple>
<input type="submit" name="upload" value="Upload">
</form>
我的django代码处理它看起来像:
for afile in request.FILES.getlist('myfiles'):
# do something with afile
编写表单字段/窗口小部件以正确处理此问题是我的下一步。我仍然很喜欢使用Django,所以我正在学习。
答案 1 :(得分:9)
request.FILES.get('filename', None)
响应存在这样的表单命名字段:
<input type="file" name="filename"></input>
如果你有两个这样的领域:
<input type="file" name="file1"></input>
<input type="file" name="file2"></input>
然后request.FILES.get('file1', None)
和request.FILES.get('file2', None)
应分别为您提供这些文件。
原因是多部分哑剧。应该上传这三个部分(表单数据,文件1,文件2),Django的UploadFileHandler分别将其分为request.POST
和request.FILES
。
答案 2 :(得分:0)
这是这个答案的一个很好的链接:https://github.com/Chive/django-multiupload。但是,由于我没有使用ModelForm,我不得不做一些改动。 在视图中,我已将下面的代码和保存的文件写入磁盘:
for each in form.cleaned_data['attachments']:
handle_uploaded_file(each)
def uploadMyWork(request):
from .forms import UploadFileForm, handle_uploaded_file
print 'in uploadMyWork'
if request.method == 'GET':
print 'in uploadMyWork : GET'
form = UploadFileForm()
else:
form = UploadFileForm(request.POST, request.FILES)
print 'in uploadMyWork : POST'
#for each in form.cleaned_data['attachments']:
# handle_uploaded_file(each)
#return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"})
if form.is_valid():
print 'inside form valid'
for each in form.cleaned_data['attachments']:
handle_uploaded_file(each)
return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"})
print 'returning to uploadmywork'
return render(request, 'stitchme/uploadMyWork.html', {'form': form, 'msg':'hi'})