【问题标题】:Django says - No module named 'blog'Django 说 - 没有名为“博客”的模块
【发布时间】:2017-06-17 05:13:47
【问题描述】:

将我的博客应用程序添加到 settings.py 的 INSTALLED_APPS 部分时,我收到 "ModuleNotFoundError: No module named 'blog'" 错误。我已经确定这与我在 INSTALLED_APPS 下添加“博客”应用程序的方式有关。当我从INSTALLED_APPS 中删除“博客”引用时,错误消失了。看起来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',
]

【问题讨论】:

  • 因为你的应用在my_project模块中,我相信你应该在INSTALLED_APPS中写my_project.blog而不是简单的blog
  • 谢谢你修复它。
  • 我有同样的问题,如果它在管理部分正常工作,但是当我添加 my_project_name.blog 时出现问题
  • 同意文森特,使用my_project.blog 有效。必须记住,这将根据manage.py 所在的位置起作用。

标签: python django installation python-module


【解决方案1】:

我遇到了类似的问题。原来我已经在 settings.py 中注册了我的应用,然后再运行 'python manage.py startapp #myapp。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

我的问题通过以下格式在myproject的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',  ]

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      您可以将&lt;full_path_to_your_project&gt;/myproject/myproject 添加到PYTHONPATH 以便您可以导入blog,但我不建议这样做

      【讨论】:

      • 谢谢你解决了它,所以这里的教训是如果使用非标准 Django 结构是包含应用程序的完整路径。
      • 我不会说您的目录结构不寻常。如果您可以从 shell 运行 import my_app,那么您可以将其包含为应用程序
      【解决方案5】:

      目录结构异常。更常见的是,与您的应用程序命名为 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
      

      【讨论】:

      • 这是正确的方法。模块和站点文件夹必须粘在一起
      猜你喜欢
      • 2018-07-15
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2013-07-17
      • 2023-03-26
      相关资源
      最近更新 更多