From dc94b8a4dfbafa4c1381a95a066c4d0ad1f6ab64 Mon Sep 17 00:00:00 2001 From: erjemin Date: Mon, 8 Jun 2026 10:24:37 +0300 Subject: [PATCH] =?UTF-8?q?mod:=20django-filer=20=D0=BD=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=20(09)=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20(fin)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lpon_site/frontend/apps.py | 58 ++------------------------------- lpon_site/lpon_site/settings.py | 13 ++++---- 2 files changed, 10 insertions(+), 61 deletions(-) diff --git a/lpon_site/frontend/apps.py b/lpon_site/frontend/apps.py index acfec9f..62e72da 100644 --- a/lpon_site/frontend/apps.py +++ b/lpon_site/frontend/apps.py @@ -4,7 +4,6 @@ import logging from io import BytesIO from django.apps import AppConfig from django.core.files.base import ContentFile -from django.core.files.storage import FileSystemStorage from PIL import Image as PILImage from lpon_site.settings import ( @@ -35,12 +34,12 @@ class FrontendConfig(AppConfig): admin.site.index_title = 'Добро пожаловать в LPON' # ============================================================================== -# Кастомная конфигурация для django-filer, которая включает в себя: -# - Кастомное хранилище для миниатюр (ThumbnailFileSystemStorage) +# Кастомная конфигурация для django-filer # - Патчинг MultiStorageFieldFile.save() для автоматической конвертации в WebP # -# Все остальные параметры конфигурации (MIME_TYPE_WHITELIST, FILER_WHITELIST_FOR_PATH_ACCESS и т.д.) +# Все параметры конфигурации (MIME_TYPE_WHITELIST, FILER_WHITELIST_FOR_PATH_ACCESS и т.д.) # определены в settings.py и импортируются оттуда. +# Удаление префикса filer_public_thumbnails/ достигается через THUMBNAIL_OPTIONS в settings.py # ============================================================================== class CustomFilerConfig(AppConfig): name = 'filer' @@ -113,54 +112,3 @@ class CustomFilerConfig(AppConfig): MultiStorageFieldFile.save = patched_save logger.info("MultiStorageFieldFile.save() patched successfully.") - -# ============================================================================== -# Кастомное хранилище для миниатюр (часть конфигурации CustomFilerConfig) -# Удаляет префикс filer_public_thumbnails/ при сохранении и генерации URLs -# ============================================================================== -class ThumbnailFileSystemStorage(FileSystemStorage): - """ - Кастомное хранилище для миниатюр. - - Удаляет префикс 'filer_public_thumbnails/' из пути сохранения и из URLs, - чтобы миниатюры хранились и отображались без этого каталога. - - Используется как часть конфигурации CustomFilerConfig. - """ - - def get_available_name(self, name, max_length=None): - """ - Переопределяем получение доступного имени файла. - Удаляем префикс 'filer_public_thumbnails/' если он присутствует. - """ - # Удаляем префикс filer_public_thumbnails/ если он есть - if name.startswith('filer_public_thumbnails/'): - name = name.replace('filer_public_thumbnails/', '', 1) - logger.debug(f"[ThumbnailFileSystemStorage.get_available_name] Удалён префикс filer_public_thumbnails/, новый путь: {name}") - - return super().get_available_name(name, max_length) - - def _save(self, name, content): - """ - Переопределяем сохранение файла. - Удаляем префикс 'filer_public_thumbnails/' перед сохранением на диск. - """ - # Удаляем префикс filer_public_thumbnails/ если он есть - if name.startswith('filer_public_thumbnails/'): - name = name.replace('filer_public_thumbnails/', '', 1) - logger.debug(f"[ThumbnailFileSystemStorage._save] Удалён префикс filer_public_thumbnails/, новый путь: {name}") - - return super()._save(name, content) - - def url(self, name): - """ - Переопределяем генерацию URL. - Удаляем префикс 'filer_public_thumbnails/' если он присутствует в URL. - Это необходимо потому, что easy_thumbnails может пытаться добавить этот префикс. - """ - # Если имя содержит префикс, удаляем его перед генерацией URL - if name.startswith('filer_public_thumbnails/'): - name = name.replace('filer_public_thumbnails/', '', 1) - logger.debug(f"[ThumbnailFileSystemStorage.url] Удалён префикс filer_public_thumbnails/ из URL, новый путь: {name}") - - return super().url(name) \ No newline at end of file diff --git a/lpon_site/lpon_site/settings.py b/lpon_site/lpon_site/settings.py index fa77876..f4f9bca 100644 --- a/lpon_site/lpon_site/settings.py +++ b/lpon_site/lpon_site/settings.py @@ -175,16 +175,17 @@ FILER_STORAGES = { 'UPLOAD_TO_PREFIX': '', }, 'thumbnails': { - # Используем кастомное хранилище, которое удаляет префикс filer_public_thumbnails/ - # Смотримайте класс ThumbnailFileSystemStorage в frontend/apps.py (часть CustomFilerConfig) - 'ENGINE': 'frontend.apps.ThumbnailFileSystemStorage', + 'ENGINE': 'filer.storage.PublicFileSystemStorage', 'OPTIONS': { 'location': MEDIA_ROOT / 'flrm', 'base_url': MEDIA_URL + 'flrm/', }, - # Используем ту же функцию генерации пути, что и для основных файлов. - 'UPLOAD_TO': 'filer.utils.generate_filename.randomized', - 'UPLOAD_TO_PREFIX': '', + # Переопределяем THUMBNAIL_OPTIONS чтобы убрать prefix 'filer_public_thumbnails' + # По умолчанию filer добавляет 'base_dir': 'filer_public_thumbnails', мы это отключаем + # Почему-то этого нет в документации. :( + 'THUMBNAIL_OPTIONS': { + 'base_dir': '', + }, }, }, }