我正在启动一个 django 1.10 项目并想拆分设置文件。我对任何现有的解决方案都不满意。
- 我不希望能够覆盖另一个文件中的
string
//设置boolean
。//dict
每个设置应该只设置在一个地方。这使得跟踪定义事物的位置变得容易。string
boolean
dict
我不想手动扩展
tuple
/list
设置,例如INSTALLED_APPS += (test_app)
. 这似乎很混乱,需要我跟踪另一个文件中是否使用了列表或元组。我不想在多个文件中
import os
定义。干燥。BASE_DIR
我的解决方案,看了很多其他的,是settings.py
用一个包含local_settings.py
,common_settings.py
和__init__.py
.
在__init__.py
,我import os
和计算BASE_DIR
。我那时
import builtins
builtins.BASE_DIR = BASE_DIR
builtins.os = os
from .common_settings import *
from . import local_settings
# At this point both modules have run and we no longer need to be messing
# with the builtins namespace.
del builtins.BASE_DIR
del builtins.os
del builtins
然后我循环dir(local_settings)
并搞砸globals()
以实现前两个要求(如果需要,我可以发布整个内容,但我对我的使用感兴趣builtins
)。
这是用的builtins
太邪恶了吗?有什么能破的。显然,如果任一标识符与更高版本的属性冲突builtins
,则此代码将破坏 python。如果使用这些标识符中的任何一个的函数最终出现在一个设置文件中并且后来被调用,那么它就会中断。
不过,我没有看到任何一种情况发生。是否存在我没有看到的潜在问题?