Атрибут name

Атрибут name класса File в Django предназначен для получения имени файла в виде строки. Он возвращает относительный путь к файлу в хранилище (storage), включая все вложенные директории. Атрибут доступен для любого объекта File, включая загруженные файлы, файлы в хранилище и файлы, созданные вручную. Значение атрибута представляет собой строку, которую можно использовать для идентификации файла, операций с хранилищем или вывода имени в интерфейсе.

Важно понимать, что name возвращает именно относительный путь относительно корня хранилища, а не полный путь в файловой системе. Полный путь можно получить с помощью метода path, если хранилище является файловой системой.

Синтаксис

pythonfile_instance.name

Атрибут доступен только для чтения и возвращает строковое значение. Он не принимает никаких аргументов.

Пример . С загруженным файлом

Рассмотрим типичный пример получения имени загруженного файла в обработчике формы:

pythonfrom django.core.files.uploadedfile import UploadedFile

# Имитация загруженного файла
uploaded_file = UploadedFile(file=b"content", name="document.pdf")

# Получение имени
file_name = uploaded_file.name
print(file_name)

Результат выполнения кода:

python"document.pdf"

Как видно из примера, атрибут name возвращает исходное имя загруженного файла без изменений.

Пример . С файлом из модели

Рассмотрим использование атрибута для модели с полем FileField:

pythonfrom 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
pythonfrom myapp.models import Document

# Получение объекта и его файла
doc = Document.objects.get(id=1)
file_name = doc.file.name

# Вывод имени
print(file_name)

Результат выполнения кода:

python"documents/report_2026.pdf"

Обратите внимание, что name возвращает путь относительно корня хранилища, включая директорию, указанную в upload_to.

Пример . С ручным созданием объекта File

Атрибут также работает при ручном создании объекта File:

pythonfrom 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)

Результат выполнения кода:

python"notes.txt"
"image.jpg"

Во втором случае мы явно указали имя файла при создании объекта File.

Смотрите также

  • атрибут size,
    который возвращает размер файла в байтах
  • класс UploadedFile,
    который представляет загруженный файл в Django
  • класс FileSystemStorage,
    который реализует хранилище в файловой системе
  • метод size,
    который возвращает размер файла в хранилище