Django не загружает новые файлы из каталога stati c до перезагрузки сервера - PullRequest
1 голос
/ 29 января 2020

У меня в работе есть приложение Django, в котором есть функция сохранения изображений в каталог app/static/gallery/ из приложения.

, затем приложение загружает эти изображения из каталога в шаблоне.

<img src="{% static 'gallery/1.jpg' %}">
  • Проблема здесь в том, что приложение находится в производстве и постоянно сохраняет изображения в static/gallery, оно не будет загружать новые изображения, пока я не перезапущу сервер.

Я использую http://whitenoise.evans.io/en/stable/django.html# для обслуживания stati c файлов.

→ django-admin version
2.2.4
  • Как решить эту проблему, чтобы всегда обслуживать stati c файлы для их мгновенной загрузки без перезагрузки сервера.

1 Ответ

1 голос
/ 30 января 2020

Это не то, для чего используется 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/

...