Ошибка при создании папки на сервере

Разместил на сервере ubuntu проект. Пытаюсь создать папку на сервере следующим кодом

def check_image(self, user):
    new_folder = os.path.join('media', 'mu_folder', f'user_{user}')
    try:
        path = os.mkdir(new_folder)
    except Exception as e :
        print ("Creation of the directory %s failed" % e)

    return new_folder

Однако получаю ошибку

path = os.mkdir(new_folder) FileNotFoundError: [Errno 2] No such file or directory:'media/mu_folder/user_1'

Пытался так же указать такой вариант

def check_folder(self, user):
    new_folder = os.path.join(settings.BASE_DIR, 'media', 'mu_folder', f'user_{user}')
    try:
        path = os.mkdir(new_folder)
    except Exception as e :
        print ("Creation of the directory %s failed" % e)

    return new_folder

файл setting.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join (BASE_DIR, "static")
MEDIA_URL = '/media/'
DEFAULT_IMG = (STATIC_URL + 'no_image.png')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Однако получал тоже ошибку

path = os.mkdir(new_folder) FileNotFoundError: [Errno 2] No such file or directory:'root/project/projectfolder/media/mu_folder/user_1'

В в корневом файле urls.py указывал два варианта. в файле urls.py самого проекта(который вызывает создание папки) не указывал ниже указанные варианты.

1 вариант

urlpatterns = [
    ...
    ...
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2 вариант

urlpatterns = [
    ...
    ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Подскажите, из-за чего может не создаваться папка на сервере.


Ответы (1 шт):

Автор решения: Inventor

Когда вы используете os.makedir('media/mu_folder/user_1'), то python пытается создать директорию user_1 по пути media/mu_folder. Если путь media/mu_folder не существует, то выбрасывается исключение, которое вы сейчас видите.

Если вы хотите, чтобы python сам автоматически создавал каталоги media и mu_folder, а не выбрасывал исключение используйте os.makedirs

→ Ссылка