Атрибут name
Атрибут name класса File в Django предназначен для получения имени файла в виде строки. Он возвращает относительный путь к файлу в хранилище (storage), включая все вложенные директории. Атрибут доступен для любого объекта File, включая загруженные файлы, файлы в хранилище и файлы, созданные вручную. Значение атрибута представляет собой строку, которую можно использовать для идентификации файла, операций с хранилищем или вывода имени в интерфейсе.
Важно понимать, что name возвращает именно относительный путь относительно корня хранилища, а не полный путь в файловой системе. Полный путь можно получить с помощью метода path, если хранилище является файловой системой.
Синтаксис
file_instance.name
Атрибут доступен только для чтения и возвращает строковое значение. Он не принимает никаких аргументов.
Пример . С загруженным файлом
Рассмотрим типичный пример получения имени загруженного файла в обработчике формы:
from django.core.files.uploadedfile import UploadedFile
# Имитация загруженного файла
uploaded_file = UploadedFile(file=b"content", name="document.pdf")
# Получение имени
file_name = uploaded_file.name
print(file_name)
Результат выполнения кода:
"document.pdf"
Как видно из примера, атрибут name возвращает исходное имя загруженного файла без изменений.
Пример . С файлом из модели
Рассмотрим использование атрибута для модели с полем FileField:
from django.db import models
class Document(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to="documents/")
def __str__(self):
return self.title
from myapp.models import Document
# Получение объекта и его файла
doc = Document.objects.get(id=1)
file_name = doc.file.name
# Вывод имени
print(file_name)
Результат выполнения кода:
"documents/report_2026.pdf"
Обратите внимание, что name возвращает путь относительно корня хранилища, включая директорию, указанную в upload_to.
Пример . С ручным созданием объекта File
Атрибут также работает при ручном создании объекта File:
from django.core.files import File
from django.core.files.base import ContentFile
# Создание файла с содержимым
content_file = ContentFile(b"some content", name="notes.txt")
# Проверка имени
print(content_file.name)
# Использование с открытым файлом
with open("/path/to/image.jpg", "rb") as f:
file_obj = File(f, name="image.jpg")
print(file_obj.name)
Результат выполнения кода:
"notes.txt"
"image.jpg"
Во втором случае мы явно указали имя файла при создании объекта File.
Смотрите также
-
атрибут
size,
который возвращает размер файла в байтах -
класс
UploadedFile,
который представляет загруженный файл в Django -
класс
FileSystemStorage,
который реализует хранилище в файловой системе -
метод
size,
который возвращает размер файла в хранилище