我最近一直在将Django应用程序的集合旋转到一个命名空间中,以便我们可以将它们重用于具有不同设置,媒体文件等的多个部署中。其核心工作良好。我们可以创建一个新的Django项目,并在INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.messages',
'import_export',
'rest_framework',
'reversion',
'crispy_forms',
'our_namespace.our_app',
]
中包含所需的所有应用程序(来自名称空间)。
我要解决的问题是,我们还必须明确包含命名空间应用程序所依赖的Django应用程序。例如,我们目前需要的位置:
INSTALLED_APPS = [
'our_namespace.our_app', # brings all its dependencies with it
]
我希望能够将其减少为:
INSTALLED_APPS
其他设置更易于处理,但注入AppConfig.ready()
似乎很困难。从const theme = createMuiTheme({
palette: {
primary: {
main: "#46AD8D",
contrastText: "white" //button text white instead of black
},
background: {
default: "#394764"
}
}
});
执行此操作似乎无效,因为(出于其他原因)only runs after models have imported(通常为时已晚)。
在这里我有什么选择?这次我只是太懒了吗?
答案 0 :(得分:0)
我见过的一种使用方法是this one, by Mezzanine,它要求您在项目的设置文件底部调用一个方法:
try:
from mezzanine.utils.conf import set_dynamic_settings
except ImportError:
pass
else:
set_dynamic_settings(globals())
如果您随后查看set_dynamic_settings
的功能(请参阅上面的链接),它将检查到目前为止定义的设置并在适当的地方进行修改-包括对INSTALLED_APPS
进行更改,例如:
def set_dynamic_settings(s):
for app in required_apps: # Where required_apps is a list if apps you need
if app not in s["INSTALLED_APPS"]:
s["INSTALLED_APPS"].append(app)
这是我知道做这种事情的唯一方法。尝试从自己的应用程序中进行操作(即,不向设置文件中添加任何其他代码)将无法正常工作,因为Django在加载应用程序时就已经初始化了设置对象。