1

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

错误消失,为什么?

4

3 回答 3

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
于 2012-06-20T07:08:55.453 回答
0

manage.py向下移动 1 级(在 djproject/djproject/ 内)应该会有所帮助。然后,您将能够根据需要导入模块:

from jobs.models import Job
于 2012-06-20T08:06:36.767 回答
-1
import sys
sys.path.append('/home/python/djproject/djproject')

在我将它添加到setting.py之后,它就可以工作了。(正如内部服务器错误所说。)我将myapp(jobs)“mv”到与manage.py相同的文件夹中,它也可以工作。(正如Simeon Visser所说。)

于 2012-06-20T07:38:52.187 回答