Метод url
Метод url применяется к объекту Storage и возвращает
строку с URL-адресом, по которому можно получить доступ
к файлу. URL генерируется на основе настроек хранилища
и имени файла. Этот метод особенно полезен, когда
необходимо получить публичную ссылку на файл для
использования в шаблонах или API. В зависимости от
типа хранилища, URL может указывать на локальный путь
или на удаленный ресурс, например, в облачном сервисе.
Синтаксис
storage.url(name)
Параметры метода:
-
name- имя файла в хранилище, для которого требуется получить URL-адрес.
Пример . С хранилищем по умолчанию
Давайте получим URL для файла "documents/report.pdf" с использованием хранилища по умолчанию:
from django.core.files.storage import default_storage
file_name = "documents/report.pdf"
file_url = default_storage.url(file_name)
print(file_url)
Результат выполнения кода:
"/media/documents/report.pdf"
Пример . С FileSystemStorage
Создадим экземпляр хранилища FileSystemStorage и получим URL для файла "images/photo.jpg":
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location="/var/www/media")
file_name = "images/photo.jpg"
file_url = fs.url(file_name)
print(file_url)
Результат выполнения кода:
"/media/images/photo.jpg"
Пример . С моделью Django
Рассмотрим пример использования метода url в модели Article для получения URL загруженного изображения:
from django.db import models
from django.core.files.storage import default_storage
class Article(models.Model):
title = models.CharField(max_length=200)
image = models.FileField(upload_to="articles/")
def get_image_url(self):
if self.image:
return default_storage.url(self.image.name)
return None
article = Article.objects.get(id=1)
image_url = article.get_image_url()
print(image_url)
Результат выполнения кода:
"/media/articles/screenshot.png"
Пример . С InMemoryStorage
Используем InMemoryStorage для получения URL файла, хранящегося в памяти:
from django.core.files.storage import InMemoryStorage
memory_storage = InMemoryStorage()
file_name = "temp/data.txt"
file_url = memory_storage.url(file_name)
print(file_url)
Результат выполнения кода:
"/temp/data.txt"