2012-06-20 3 views
1

django 1.4, python 2.6.6입니다.
앱이 "작업"있습니다.
내 파일 트리 :"ImportError : 모듈이 jobs.models"이고 상대 경로가

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) 

나는 "파이썬 manage.py 쉘"하는 파일 "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 

오류 사라지는를 사용하는 경우, 그 이유는 무엇입니까?

답변

6

이전 버전의 장고에서와 다른 디렉토리에서 manage.py을 실행 중이기 때문에 예상과 같습니다. 자세한 내용은 Django 문서의 Updated default project layout and manage.py을 참조하십시오.

이제 코드를 가져올 때 djproject을 포함해야하므로 트리의 상위 디렉토리에서 manage.py을 시작합니다. (당신이 원하는 경우) 문서도 다르게 작업을 수행하는 방법에 대한 제안을 제공합니다 : 나는 setting.py에이 추가

Anything imported as a top-level module can be placed adjacent to the new manage.py. For instance, to decouple "myapp" from the project module and import it as just myapp, place it outside the mysite/ directory:

manage.py 
myapp/ 
    __init__.py 
    models.py 
mysite/ 
    __init__.py 
    settings.py 
    urls.py 
+0

그러나 폴더 트리는 "django-admin.py startproject djporject"에 의해 생성됩니다. –

+3

사실,'manage.py'의 위치가 변경되었다는 것은 모듈을 가져올 때 프로젝트의 이름을 포함해야한다는 것을 의미합니다. –

+0

새로운 오류. "mv"작업 폴더를 사용하여 문제를 해결할 수 있다고 생각했습니다. 하지만 오류가 발생했습니다 : 오류 : 작업 이름이 모듈이 없습니다. "python manage.py shell"을 입력하면 왜됩니까? –

-1
import sys 
sys.path.append('/home/python/djproject/djproject') 

후에는 작업 (내부 서버 오류가 말했듯이..) 및 manage.py와 같은 폴더에 I "MV"MyApp를 (작업),이 중 하나를 사용할 수 있습니다. (시므온 Visser는 말처럼.)

+0

새로운 오류가 발생했습니다. 오류 : 모듈 이름이 ' –

+0

'입니다. 수정해야합니다. 내 settings.py ethier, djproject/djproject 내부에서 "djproject.jobs"를 "jobs"로 수정하십시오 –

0

이 djproject/djproject/내부 (manage.py 1 수준 아래로 이동) 도움이 될 것입니다. 그러면 원하는대로 모듈을 가져올 수 있습니다 :

from jobs.models import Job 
+0

? 그것은 권장되지 않습니다. 당신이 "1"레벨을 말했을 때, 당신은 최고 레벨을 의미 했습니까? –

+0

실제 위치 (* djproject/*에서 * djproject/djproject/*까지)에서 1 레벨 아래로 내려갑니다. 그런 다음 manage.py는 귀하의 애플 리케이션과 같은 수준에 있으므로 원하는대로 가져올 수 있습니다. – tunarob