我制作了一个django应用程序,它设计为易于插拔,只有1个视图,1个项目计划使用该应用程序需要注意。
为方便起见,我想从应用级别提供视图和模型。所以而不是:
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()
所以现在确实可以直接从外部导入视图和模型。这有用还是可怕?
答案 0 :(得分:0)
大多数Django应用程序不会将视图或模型收集到顶级模块。请参阅django.contrib.auth
作为示例。
答案 1 :(得分:0)
大多数Django应用程序不会将视图或模型收集到顶级模块。使用明确的文档演示如何从您的应用程序导入。包括globals()
在内的黑客可能会造成比帮助更多的麻烦。
以django.contrib.auth
为例。