Django 说 - 没有名为 'blog' 的模块

Django says - No module named 'blog'

将我的博客应用程序添加到 settings.py 的 INSTALLED_APPS 部分时出现 "ModuleNotFoundError: No module named 'blog'" 错误。我确定这与我在 INSTALLED_APPS 下添加 "blog" 应用程序的方式有关。当我从 INSTALLED_APPS 中删除 'blog' 引用时,错误消失了。 Django 似乎无法找到我的博客应用程序的目录?

我做了一件不同的事情,那就是使用:

python manage.py startapp blog /myproject

这里的区别是指定 /myproject 目录而不是使用:

python manage.py startapp blog

这将把它放在根目录下myproject。我想避免在根文件夹中添加应用程序目录,这样我就更有条理了。但看起来 Django 不喜欢这个,或者我没有在 INSTALLED_APPS 部分正确引用它?

我的项目目录如下:

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

在我的 settings.py 我已经设置了我的应用程序 blog:

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

目录结构异常。更常见的是,与您的应用程序相匹配的名为 blog 的是

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

Django 需要能够导入您的应用程序,通常这意味着包括相对于根目录的完整路径 'myproject.blog'

您可以将 <full_path_to_your_project>/myproject/myproject 添加到 PYTHONPATH 以便您可以导入 blog,但我不推荐它

我通常会在已安装的应用程序中添加配置路径来避免这个问题。所以安装的应用程序看起来像这样:

NSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog,apps.BlogConfig',

我的问题是通过在我的项目的 settings.py 中以下面的格式添加应用程序的路径来解决的

INSTALLED_APPS = [
'blog.apps.BlogConfig', # <app_name>.apps.<class_name>
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',  ]

我有一个类似的问题。结果我已经在 settings.py 之前注册了我的应用程序 运行 'python manage.py startapp #myapp.