brewcrazy
brewcrazy

Reputation: 665

Django project restructure: Can't import app

I'm trying to restructure my project to match the recommendation in the latest Two Scoops of Django book (for Django 1.11).

After completing the restructure, my app can't be imported.

secureDash_project
    ├── README.rst
    ├── config
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── db.sqlite3
    │   ├── settings
    │   │   ├── __init__.py
    │   │   ├── __pycache__
    │   │   └── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── db.sqlite3
    ├── manage.py
    ├── requirements.txt
    └── secureDash
        ├── __init__.py
        ├── __pycache__
        ├── dash
        │   ├── __init__.py
        │   ├── __pycache__
        │   ├── admin.py
        │   ├── apps.py
        │   ├── forms.py
        │   ├── migrations
        │   │   └── __init__.py
        │   ├── models.py
        │   ├── tests.py
        │   ├── urls.py
        │   └── views.py
        └── templates
            └── dash

settings.py excerpt:

...
import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(
    os.path.dirname(os.path.abspath(__file__))))
ENV_PATH = os.path.abspath(os.path.dirname(__file__))

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

# Application definition

INSTALLED_APPS = [
    'secureDash.dash.apps.DashConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'django_static_jquery',
    # 'bootstrap3',
] ...

When running

python3 manage.py runserver --settings=config.settings.settings

I get:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x1076b0d08>
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 113, in inner_run
    autoreload.raise_last_exception()
  File "/usr/local/lib/python3.5/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception
    six.reraise(*_exception)
  File "/usr/local/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.5/site-packages/django/utils/autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.5/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/usr/local/lib/python3.5/site-packages/django/apps/config.py", line 142, in create
    app_module = import_module(app_name)
  File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'dash'

secureDash.dash.apps.DashConfig:

from django.apps import AppConfig


class DashConfig(AppConfig):
    name = 'dash'

Upvotes: 3

Views: 2628

Answers (1)

user378704
user378704

Reputation:

Replacing secureDash.dash.apps.DashConfig with secureDash.dash in INSTALLED_APPS should fix it.

Upvotes: 6

Related Questions