1

私は 2 Scoops の Django 1.8 リーダーです。第 29 章 (これらのランダムなユーティリティについて) では、core一般的に使用されるコードを格納するアプリを作成することを提案しています。また、この構文を使用してコードをインポートできることも示唆しています。

例えば

from core.models import TimeStampedModel

この相対インポートは機能しないようです。私は使用してcookiecutter-djangoおり、行う必要がありました:

from projectname.apps.core.models import TimeStampedModel

私はに追加しようとAPPS_DIRしましたpath

sys.path.insert(str(APPS_DIR))

しかし、今では同じ名前の 2 つのモジュールがありnew_appprojectname.apps.new_app.

明示的なインポートを避けたいだけです。Installed Appsインポートの競合を作成せずに python パスに含める方法はありますか? 外部アプリのインポートに関するベスト プラクティスは何ですか?

編集:プロジェクト構造を追加します

.
├── README.rst
├── manage.py
├── config
│   ├── __init__.py
│   ├── settings
│   │   ├── __init__.py
│   │   ├── common.py
│   │   ├── local.py
│   │   ├── test.py
│   │   ├── production.py
│   │   └── staging.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── projectname
│   ├── __init__.py
│   ├── apps
│   │   ├── __init__.py
│   │   ├── core
│   │   │   └── __init__.py
│   │   └── new_app
│   │       └── __init__.py
│   ├── static
│   │   └── ...
│   └── templates
│       └── ...
├── requirements
│   ├── base.txt
│   ├── local.txt
│   ├── production.txt
│   └── test.txt
└── tests
    └── ...
4

1 に答える 1

0

相対インポートを使用する場合は、この方法でインポートする必要があります

from .core.models import TimeStampedModel

これは、Django 1.8 でサポートされていない絶対インポートとは異なり、コードが実行されている相対パスを取ります。

于 2015-10-02T10:16:35.607 に答える