1

django 1.4、python2.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)

次に、ファイル「manage.py」と同じレベルのフォルダーである「pythonmanage.pyshell」を実行します。
次に、「fromjobs.modelsimportJob」と入力します。
次のようなエラー(相対パス):

>>> 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に追加すると、機能します(内部サーバーエラーが言ったように)。また、manage.pyを使用してmyapp(jobs)を同じフォルダーに「mv」します。どちらも機能します(Simeon Visserが言ったように)。

于 2012-06-20T07:38:52.187 に答える