Невозможно получить доступ к медиафайлу, даже если файл существует при проверке вручную

У меня есть медиафайл, к которому Django не может получить доступ, даже если он определенно существует, если я ввожу его URL в браузере.

Info

  1. Language: Python [v.3.9.7]
  2. Platform: Django [v.3.2.8]

Гол

Возможность доступа к медиафайлу

Описание

Дело в том, что люди могут загружать книги на мой сайт. Люди загружают изображения этих книг разных размеров, поэтому я хочу иметь возможность обрабатывать их все, поэтому я получаю доступ к ширине и высоте изображения, а затем использую их в качестве размера изображения в представлении (CSS). Для этого я использовал пользовательский фильтр image_size, который будет выполнять всю работу по доступу к изображению и определению его размера, который я отправляю обратно в представление:

@register.filter
def image_size(img, host):
    img = host[0] + "://" + host[1] + img
    with Image.open(img) as image:
        width, height = image.size
        dct = {
            "width": width,
            "height": height
        }
        return dct

Здесь host[0] - это протокол (request.scheme) URL изображения, а host[1] - имя хоста (request.get_host()). Вот мое представление:

def all_books(request):
    if request.user.is_authenticated:
        context = {
            "books": Book.objects.all(),
            "request": request,
            "user_profile": UserProfileInfo.objects.get(user=request.user),
            "mail_sent": False,
        }
    else:
        context = {
            "books": Book.objects.all(),
            "request": request,
            "mail_sent": False,
            "user_profile": False,
        }
    context["host"] = [request.scheme, request.get_host()]
    if request.GET.get("context") == "mail_sent":
        context["mail_sent"] = True
    return render(request, 'main/all_books.html', context)

settings.py static and media config:

STATIC_URL = '/static/'
STATICFILES_DIRS = [STATIC_DIR,]
MEDIA_ROOT  = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
LOGIN_URL = '/main/user_login/'

Где BASE_DIR является Path(__file__).resolve().parent.parent (Path импортируется из pathlib)

Я не сделал collectstatic потому что по какой-то причине он удаляет связь с CSS и внезапно никакой CSS не отображается.

Что нужно сделать, чтобы он заработал?

Загруженные файлы попадают в MEDIA_ROOT, если в поле модели не определено иначе Вы строите путь к img файлу "вручную" в фильтре ... который не указывает на media/...

img = host[0] + "://" + host[1] + img
Вернуться на верх