Внешняя таблица стилей CSS и изображения не отображаются в веб-приложении Django при DEBUG=False

У меня есть базовое веб-приложение Django, которое использует внешнюю таблицу стилей CSS в папке static/css, font-awesome-fonts в папке static/fonts и загруженные пользователем изображения в папке media/images. Когда я устанавливаю DEBUG = False, изображения и таблицы стилей CSS игнорируются, и отображается только HTML-шаблон.

Моя структура каталогов выглядит следующим образом:

app/
├── myapp/   
├── media/
├── static/
└── templates/
settings.py

BASE_DIR = Path(__file__).resolve().parent.parent

DEBUG = True

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates/")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static/"),
)

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

Я выяснил, как отображать медиа в основных проектах URLs.py, добавляя утверждения if else, но даже когда я добавляю + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) в конец urlpatterns[], оно не отображается, когда DEBUG = False. Я также попробовал добавить static(settings.STATIC_URL, document_root=settings.STATIC_ROOT).

urls.py

from django.contrib import admin
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    path('', include('myapp.urls')),
    path('admin/', admin.site.urls),
]

# Serving the media files in development mode
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    urlpatterns += staticfiles_urlpatterns()

Django не обслуживает статику, когда DEBUG=False.

Вы должны добавить URL, как вы это делали для медиа, или обслуживать его другим способом (фронтенд или внешнее хранилище).

Вернуться на верх