6

最初から django プロジェクトを開発するための最良のセットアップを取得しようとしていますが、ディレクトリ構造ですべてを適切に実行するのに問題があります。すべての django プロジェクトにクリーンな空の Python 環境をデプロイできるように、virtualenv (この例では env) をセットアップしました。

基本的な構造は次のとおりです。

/env/
    /bin
    /db         <--- Django DB
    /downloads
    /lib
    /static     <--- Where css/imgs/js etc is served from
    /project/   <--- Django root
            /__init__.py
            /settings.py
            /manage.py
            /appsfolder/
                 /appname/
                       /__init__.py
                       /models/
                              /__init__.py
                              /somemodel.py
                       /urls/
                             /__init__.py
                             /someurl.py
                       /views/
                             /__init__.py
                             /someview.py

これが基本的なレイアウトです。各プロジェクトにはアプリケーション用のディレクトリがあり、各アプリケーションにはモデル、ビュー、および URL 用の個別のフォルダーが必要です。

私が抱えている問題は、python パスとモジュールの処理方法にあります。

アプリケーション内で、モデルをインポートするときにプロジェクトを参照する必要はありません。つまり、次を使用する必要があります。

import appname.models.modelname

いいえ:

import projectname.models.modelname

再利用性を助けるために

models ディレクトリには、次のinit .pyがあります。

from model1 import ModelName1
from model2 import ModelName2
from model3 import ModelName3

__all__ = ['ModelName1', 'ModelName2', 'ModelName3']

しかし、別の url ファイル (/appname/urls/urlfile.py 内) を使用して、次のようなモデルをインポートしようとすると:

from appname.models.somemodel import ModelName

「モジュールが見つかりません」というエラーが表示されます。

その間:

from appsfolder.appname.models.somemodel import ModelName

正常に動作します

これは、アプリケーションが直接 Python パスにあるのではなく、appsfolder というサブフォルダーにあるためだと思いますが、すべてを再利用可能かつ相対的に保ちながら、これを修正する方法がわかりません。

解決策の 1 つは、すべてのアプリをサイト パッケージの下の Python パスに直接配置することだとわかっていますが、virtualenv の

4

1 に答える 1

16

settings.pyあなたはあなたにあなたを追加するためにあなたに以下を入れることができappsfolderますPYTHONPATH

import os
import sys

PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'appsfolder'))
于 2010-10-04T16:01:43.457 に答える