From 31cd78079a672e09b214e73051cf512dd8001331 Mon Sep 17 00:00:00 2001 From: erjemin Date: Tue, 31 Mar 2026 00:31:32 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B2=20?= =?UTF-8?q?DEV=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B5=20-=20=D0=98=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B8=20STATICFILES=5FDIRS=20=D0=B8=20MEDIA=5FROOT=20(?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=20=D0=B4=D0=BE=D0=BB=D0=B6=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B1=D1=8B=D1=82=D1=8C=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=20=D0=BA=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0,=20=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20settings.py)=20-=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0=20STATIC=5FURL=20=D0=B2=20urls.py=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20DEBUG=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20-=20?= =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=20=D1=87?= =?UTF-8?q?=D1=82=D0=BE=20=D0=B2=D1=81=D0=B5=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D1=8B=20(CSS,=20JS)=20=D0=BE=D1=82=D0=B4=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D1=81=20=D0=BA=D0=BE=D0=B4=D0=BE=D0=BC=20?= =?UTF-8?q?200=20=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5:=20-=20Media:=20=E2=9D=8C=20=D0=9D?= =?UTF-8?q?=D0=B5=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20(=D0=BD=D0=B5=D1=82=20FileField/ImageField?= =?UTF-8?q?=20=D0=B2=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8F=D1=85)=20-=20S?= =?UTF-8?q?tatic:=20=E2=9C=85=20=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D1=83=D0=B5=D1=82=D1=81=D1=8F=20(CSS,=20JS,=20images=20=D0=B2?= =?UTF-8?q?=20public/static)=20=D0=A1=D1=82=D0=B0=D1=82=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82=20=D0=B2=20dev=20=D0=BE=D0=BA=D1=80?= =?UTF-8?q?=D1=83=D0=B6=D0=B5=D0=BD=D0=B8=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rosmorport_tsts/rosmorport_tsts/settings.py | 12 +++++++----- rosmorport_tsts/rosmorport_tsts/urls.py | 4 +++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/rosmorport_tsts/rosmorport_tsts/settings.py b/rosmorport_tsts/rosmorport_tsts/settings.py index 799b32e..9b11f8c 100644 --- a/rosmorport_tsts/rosmorport_tsts/settings.py +++ b/rosmorport_tsts/rosmorport_tsts/settings.py @@ -182,20 +182,22 @@ STATIC_URL = 'static/' MEDIA_URL = 'media/' # Пути для файлов (из переменных окружения) -MEDIA_ROOT = get_env('MEDIA_ROOT', str(BASE_DIR / 'public' / 'media')) -SITEMAP_ROOT = get_env('SITEMAP_ROOT', str(BASE_DIR / 'public')) -TOUCH_RELOAD = get_env('TOUCH_RELOAD_PATH', str(BASE_DIR / 'logs' / 'touchreload.txt')) +# BASE_DIR это директория rosmorport_tsts/, поэтому идём на уровень выше +PROJECT_ROOT = BASE_DIR.parent +MEDIA_ROOT = get_env('MEDIA_ROOT', str(PROJECT_ROOT / 'public' / 'media')) +SITEMAP_ROOT = get_env('SITEMAP_ROOT', str(PROJECT_ROOT / 'public')) +TOUCH_RELOAD = get_env('TOUCH_RELOAD_PATH', str(PROJECT_ROOT / 'logs' / 'touchreload.txt')) # Статические файлы - разные конфигурации для DEBUG и PRODUCTION if DEBUG: # В режиме разработки Django сам будет раздавать статические файлы # и не нужен STATIC_ROOT, но нужны STATICFILES_DIRS для поиска файлов STATICFILES_DIRS = [ - BASE_DIR / 'public' / 'static', + PROJECT_ROOT / 'public' / 'static', ] else: # В продакшене нужен STATIC_ROOT для collectstatic - STATIC_ROOT = get_env('STATIC_ROOT', str(BASE_DIR / 'public' / 'static')) + STATIC_ROOT = get_env('STATIC_ROOT', str(PROJECT_ROOT / 'public' / 'static')) STATICFILES_DIRS = [] # Default primary key field type (Тип primary key в моделях) diff --git a/rosmorport_tsts/rosmorport_tsts/urls.py b/rosmorport_tsts/rosmorport_tsts/urls.py index 5439660..09e774f 100644 --- a/rosmorport_tsts/rosmorport_tsts/urls.py +++ b/rosmorport_tsts/rosmorport_tsts/urls.py @@ -40,4 +40,6 @@ urlpatterns = [ # handler500 = 'web.views.handler500' if DEBUG: - urlpatterns += static(MEDIA_URL, document_root=MEDIA_ROOT) \ No newline at end of file + # В режиме разработки раздаём статические файлы и медиа через Django + urlpatterns += static(MEDIA_URL, document_root=MEDIA_ROOT) + urlpatterns += static(STATIC_URL, document_root=STATICFILES_DIRS[0] if STATICFILES_DIRS else str(MEDIA_ROOT.parent / 'static'))