我製作了一個django應用程序,該應用程序易於插入,並且只有1個視圖,並且有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()
所以,現在的確,我可以直接導入來自外部的視圖和模型。這是有用的,還是可怕的?
這似乎很多功夫達到某事。大多數django開發者不會考慮功能。在(alomst)中有每個django應用程序的'views'和'models',並且從那裏導入名字以標記它們的語義。 [python的禪宗](https://www.python.org/dev/peps/pep-0020/)及其對隱含的明確要求也不喜歡;) – schwobaseggl