簡単にプラグインできるように設計されたdjangoアプリを作成しました。これは、1つのビューしか持たず、アプリケーションを使用するプロジェクトの計画が気にする必要があります。モジュールレベルでDjangoアプリのモデルを公開する
簡単に、私はビューとモデルをアプリレベルから利用できるようにしたいと考えています。そうではなく:
from mything.views import MyView
from mything.models import MyModel
あなただけではなく、行うことができます。
from mything import MyView, MyModel
を私はこのようなことをアプリで__init__.py
ファイルを変更:もちろん
from .views import MyView
from .models import MyModel
を私は古いを取得しますdjango.core.exceptions.AppRegistryNotReadyは、アプリが読み込まれる前にmodels.pyコードを実行しようとしているため発生しました。
私は次の回避策を考え出しました。使用するかどうかは妥当なパターンかどうかと思います。今__init__.py
に私が持っている:
def _expose_items():
from .views import MyView
from .models import MyModel
globals()['MyView'] = MyView
globals()['MyModel'] = MyModel
そして、私のアプリのapps.py中:
from . import _expose_items
class MyThingConfig(AppConfig):
name = 'mything'
def ready(self):
_expose_items()
だから今確かに、私が直接外部からのビューとモデルをインポートすることができます。これは役に立ちますか、恐ろしいですか?
それはsthを達成するためにkung-fuの多くのようである。ほとんどのdjango開発者は機能を考慮しませんでした。すべてのdjangoアプリケーションに 'views'と' models'があります。そこから名前をインポートすると意味的にマークされます。 [zen of python](https://www.python.org/dev/peps/pep-0020/)と暗黙の明快さのための呼び出しもそれを気に入らない;) – schwobaseggl