2012-06-20 47 views
1

django 1.4,python 2.6.6。
我有一個應用程序「工作」。
我的文件樹:「ImportError:No module named jobs.models」with relative path

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 

錯誤disapear,爲什麼呢?

回答

6

這是預料之中的,因爲您現在正在運行manage.py與以前版本的Django不同的目錄。有關更多詳細信息,請參閱Django文檔中的Updated default project layout and manage.py

您現在從樹中較高的目錄開始manage.py,因此導入代碼時需要包含djproject。該文檔還給出瞭如何以不同的方式做到這一點建議(如果你想):

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') 

後,我加入到這個setting.py,它的工作原理(如內部服務器錯誤說。 ) 和我 「MV」 的myapp(工種)與manage.py同一個文件夾,它的作品無論是。(如西蒙Visser表示。)

+0

新錯誤,之後我輸入「mv」選項。錯誤:沒有任何模塊命名作業 –

+0

得到它。我需要修改我的settings.py ethier,在djproject/djproject裏面修改「djproject.jobs」作爲「jobs」 –

0

移動manage.py 1水平下降(內djproject/djproject /)應該有幫助。然後,您將能夠按照自己的想法導入模塊:

from jobs.models import Job 
+0

?不推薦。當你說「1」級別時,你是指最高級別? –

+0

從實際位置向下1級(從* djproject/*到* djproject/djproject/*)。然後manage.py與您的應用程序等級相同,因此您可以根據需要導入它。 – tunarob