Это не то, для чего используется stati c часть django.
Неудивительно, что это stati c контент, который вытягивается в STATIC_ROOT
и затем подается через STATIC_URL
. Это происходит, когда вы запускаете manage.py collectstatic
, обычно это часть запуска сервера. Чтобы сделать то, о чем вы говорите, вам нужно будет запускать эту команду каждый раз, когда вы добавляете изображение в путь stati c.
Если вы разрешаете приложению / пользователям загружать контент, тогда вам нужно использовать медиа сторону django (в отличие от stati c). Основные настройки, которые используются для этого, как пример проекта, который я открыл, являются:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Для загрузки подобного контента у вас обычно есть поле модели, которое может выглядеть так:
def uuid():
""" Generate a UUID """
return urlsafe_b64encode(uuid4().bytes).decode("ascii").rstrip("=")
def upload_path(instance, filename):
""" Upload to path with UUID """
return "gallery/{uuid}/{file}".format(uuid=uuid(), file=filename)
class Gallery(models.Model):
image = models.FileField(
upload_to=upload_path,
)
A FileField
затем предоставляет атрибут url
, который вы можете использовать в своих шаблонах;
<img src="{{ obj.image.url }}" />
Дополнительную информацию об обработке файлов можно найти здесь; https://docs.djangoproject.com/en/2.2/topics/files/