Django - 用于子模块的INSTALLED_APPS

时间:2017-03-23 10:07:11

标签: python django

我使用django startapp api创建了一个名为API的应用。然后我从settings.py(app)中的主应用程序(app/settings.py)加载了这个应用程序:

INSTALLED_APPS = [
   ...
   'api.apps.ApiConfig',
   ...
]

这很棒!然后,我在api文件夹(api/settings.py)中创建了一个settings.py文件。我想从这个子模块中加载一个名为rest_framework的模块(由于可重用性)。因此api/settings.py文件包含以下内容:

INSTALLED_APPS = [
   'rest_framework'
]

但是,当我运行应用程序时,未加载rest_framework模块。我找到了以下解决方法(对于app/settings.py):

from api.settings import INSTALLED_APPS as API_APPS
INSTALLED_APPS += API_APPS

我认为这不是在所有子模块的主应用程序中加载INSTALLED_APPS的最佳方法。是否有更好的方法加载所有子模块INSTALLED_APPS

1 个答案:

答案 0 :(得分:0)

每个应用程序设置的好地方是AppConfig类。默认的app config可以有合理的默认值,可以通过子类化默认的app config来自定义它们。大多数Django应用程序没有settings.py,因此如果添加app/settings.py,其他Django开发人员看起来就不寻常。

就个人而言,我会避免尝试在您的应用配置(或app / settings.py)中做一些聪明的事情。当您查看项目的设置文件时,不太清楚安装了哪些应用程序,并且可能会引入细微的错误。

Django调试工具栏,一个非常受欢迎的Django应用程序,其核心Django开发人员的贡献很多,{1.6}中的removed automatic setup,因为它有“问题”。