for f in request.FILES.getlist('file'):
# do something with the file f...
РЕДАКТИРОВАТЬ: Я знаю это был старый ответ, но я столкнулся с ним только сейчас и отредактировал ответ, чтобы он был действительно правильным. Ранее предполагалось, что вы можете выполнять итерацию напрямую по request.FILES ['file']
. Чтобы получить доступ ко всем элементам в MultiValueDict, вы используете .getlist ('file')
. Использование только ['file']
вернет только последнее значение данных, найденное для этого ключа.
Я не думаю, что все три файла будут находиться под одним объектом request.FILES ['file']
. request.FILES ['file']
, скорее всего, будет иметь либо 1-й файл, либо последний файл из этого списка.
Вам нужно однозначно назвать элементы ввода, например:
<input type=file name="file1">
<input type=file name="file2">
<input type=file name="file3">
.. для пример.
РЕДАКТИРОВАТЬ: Ответ Джастина лучше!
Учитывая, что ваш URL указывает на envia , вы можете управлять несколькими файлами следующим образом:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from django.http import HttpResponseRedirect
def envia(request):
for f in request.FILES.getlist('file'):
handle_uploaded_file(f)
return HttpResponseRedirect('/bulk/')
def handle_uploaded_file(f):
destination = open('/tmp/upload/%s'%f.name, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()