如何模块化django settings.py?

vic*_* n. 23 python django

安装新的django应用程序时,必须添加/修改settings.py模块.

对于一个项目,我试图使该模块成为python子包并为每个应用程序创建一个模块:

settings\
    __init__.py
    base.py
    admin.py
    feincms.py
    ...
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是如何合并settings.py属性(例如INSTALLED_APPS是值的元组),它们在不同的子模块中获取值?

谢谢


好吧,我问错了问题(尽管得到了正确答案).我的问题应该是,如何从所有子模块获取属性并合并它们?Django将导入设置并期望一切都在那里.

S.L*_*ott 7

"安装新的django应用程序时,必须添加/修改settings.py模块."

我觉得这很好.

我认为没有任何理由可以改变或修改它.

然而,我们所做的是"子类化"核心设置模块.

我们的特定于开发人员和特定于安装的文件具有类似settings_devxy_linux2settings_checkout_win32等的名称.

这些文件中的每一个都从from settings import *导入核心设置开始,并扩展这些核心设置,并覆盖特定的安装和平台.

它不需要任何实际工作.但是,它确实意味着我们做了大部分事情,django-admin.py因为我们的设置没有被调用settings.

  • 彼得的计划遇到了原始问题的问题:导入的模块不能轻易地将项目添加到"INSTALLED_APPS". (2认同)

Car*_*yer 6

您可能对此解决方案感兴趣; 使用execfile()按顺序加载一系列设置文件,其中每个文件都可以完全访问以前加载的文件中的设置,更新,修改等.

  • 胜利者,看到你的解决方案的代码会很有趣 (7认同)

aka*_*ola 5

我使用了这种解决方法:

settings.py

INSTALLED_APPS = ('whatever',)
import more_settings
more_settings.modify(globals())
Run Code Online (Sandbox Code Playgroud)

more_settings.py

def modify(settings):
    settings['INSTALLED_APPS'] += ('another_app',)
Run Code Online (Sandbox Code Playgroud)