Ответ 1
request.FILES['filename'].name
В документации request
.
Если вы не знаете ключ, вы можете перебирать файлы:
for filename, file in request.FILES.iteritems():
name = request.FILES[filename].name
Как я могу получить имя файла из request.FILES в Django?
def upload(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
upload = Upload()
upload.timestamp = datetime.datetime.now()
save_instance(form, upload)
Я попытался использовать это, но это не сработало:
if 'filename' in request.FILES:
filename = request.FILES['filename']
request.FILES['filename'].name
В документации request
.
Если вы не знаете ключ, вы можете перебирать файлы:
for filename, file in request.FILES.iteritems():
name = request.FILES[filename].name
file = request.FILES['filename']
file.name # Gives name
file.content_type # Gives Content type text/html etc
file.size # Gives file size in byte
file.read() # Reads file
ПРИМЕЧАНИЕ, если вы используете Python 3.x:
request.FILES
представляет собой многозначный словарь, похожий на объект, который сохраняет файлы, загруженные с помощью кнопки загрузки файла. Скажите, что в вашем HTML-коде название кнопки (type = "file") - "myfile", поэтому "myfile" будет ключевым в этом словаре. Если вы загрузили один файл, то значение этого ключа будет только одно, а если вы загрузили несколько файлов, то у вас будет несколько значений для этого конкретного ключа. Если вы используете request.FILES['myfile']
, вы получите первое или последнее значение (я не могу сказать точно). Это хорошо, если вы загрузили только один файл, но если вы хотите получить все файлы, вы должны сделать это:
list=[] #myfile is the key of a multi value dictionary, values are the uploaded files
for f in request.FILES.getlist('myfile'): #myfile is the name of your html file button
filename = f.name
list.append(filename)
конечно можно сжать все это в одну строку, но это легко понять
Ответ может быть устаревшим, поскольку в классе UploadedFile
есть свойство name
. Смотрите: Загруженные файлы и обработчики загрузки (Django docs). Итак, если вы правильно привязываете форму с помощью FileField
, доступ должен быть таким же простым, как:
if form.is_valid():
form.cleaned_data['my_file'].name