Django says - No module named 'blog'

Nermin Kekic picture Nermin Kekic · Jan 31, 2017 · Viewed 22.6k times · Source

I am getting "ModuleNotFoundError: No module named 'blog'" error when add my blog app to the INSTALLED_APPS section of settings.py. I have determined that it has something to do with the way I have added the "blog" app under INSTALLED_APPS. When I remove the 'blog' reference from INSTALLED_APPS error goes away. It looks like that Django is unable to find directory for my blog app?

I have done one thing differently and that is use:

python manage.py startapp blog /myproject

Difference here is specifying the /myproject directory and not using:

python manage.py startapp blog

Which will place it under root directory myproject. I wanted to avoid adding app directory in the root folder so i stay more organized. But it looks like Django does not like this or i am not referencing this correctly in the INSTALLED_APPS section?

My project directory is as following:

myproject/
├── myproject
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── blog
│   │   ├── __init__.py
│   │   ├── admin.py
│   │   ├── apps.py
│   │   ├── migrations
│   │   │   └── __init__.py
│   │   ├── models.py
│   │   ├── tests.py
│   │   └── views.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
└── manage.py

Inside my settings.py I have setup my app blog:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

Answer

e4c5 picture e4c5 · Jan 31, 2017

Directory structure is unusual. More usual and the one that matches your app being named blog would be

myproject/
├── myproject
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
├── blog
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
└── manage.py