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
我的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)
然后我运行“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
但是,如果我使用完整路径
>>> from djproject.jobs.models import Job
错误消失,为什么?
答案 0 :(得分:6)
这是预期的,因为您现在从与以前版本的Django不同的目录运行manage.py
。有关详细信息,请参阅Django文档中的Updated default project layout and manage.py。
您现在从树中的更高目录开始manage.py
,因此在导入代码时您需要包含djproject
。该文档还提供了有关如何以不同方式(如果需要)执行此操作的建议:
任何作为顶级模块导入的东西都可以放在旁边 新的manage.py。例如,将“myapp”与项目分离 模块并将其导入为myapp,将其放在mysite / 目录:
manage.py
myapp/
__init__.py
models.py
mysite/
__init__.py
settings.py
urls.py
答案 1 :(得分:0)
将 manage.py 向下移动1级(在djproject / djproject /中)应该会有所帮助。然后您就可以根据需要导入模块:
from jobs.models import Job
答案 2 :(得分:-1)
import sys
sys.path.append('/home/python/djproject/djproject')
将其添加到setting.py后,它可以工作。(正如内部服务器错误所说。) 并且我将“myv(jobs)”命令发送到manage.py的相同文件夹,它也可以。(正如Simeon Visser所说。)