"ImportError:没有名为jobs.models的模块",带有相对路径

Nic*_*ong 1 python django django-1.4

django 1.4,python 2.6.6.
我有一个应用程序"工作".
我的文件树:

djproject/
|-- djproject
|   |-- db
|   |   `-- tdata.db
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- jobs
|   |   |-- admin.py
|   |   |-- admin.pyc
|   |   |-- __init__.py
|   |   |-- __init__.pyc
|   |   |-- models.py
|   |   |-- models.pyc
|   |   |-- tests.py
|   |   `-- views.py
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
`-- manage.py
Run Code Online (Sandbox Code Playgroud)

我的manage.py文件:

#!/usr/bin/env python

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djproject.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
Run Code Online (Sandbox Code Playgroud)

然后我运行"python manage.py shell",其中是与文件"manage.py"相同的级别文件夹.
然后我输入"from jobs.models import Job".
错误如下(相对路径):

>>> from jobs.models import Job
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ImportError: No module named jobs.models
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用完整路径

>>> from djproject.jobs.models import Job
Run Code Online (Sandbox Code Playgroud)

错误消失,为什么?

Sim*_*ser 6

这是预期的,因为您现在manage.py从与以前版本的Django不同的目录运行.有关更多详细信息,请参阅Django文档中的更新的默认项目布局和manage.py .

您现在manage.py从树中的更高目录开始,因此djproject在导入代码时需要包含.该文档还提供了有关如何以不同方式执行此操作的建议(如果需要):

作为顶级模块导入的任何内容都可以放在新的manage.py旁边.例如,要将"myapp"与项目模块分离并将其作为myapp导入,请将其放在mysite /目录之外:

manage.py
myapp/
    __init__.py
    models.py
mysite/
    __init__.py
    settings.py
    urls.py
Run Code Online (Sandbox Code Playgroud)

  • 这是真的,只是`manage.py`的位置已经改变,这意味着你需要在导入模块时包含项目的名称. (3认同)