(也许这个问题更多的是关于 Python,但 Django 是上下文,所以就这样吧)
假设您需要一个设置FOO
,其值取决于设置的值BAR
(最简单的情况是CELERY_RESULT_BACKEND
等于BROKER_URL
)。
如果您只有一个设置文件,那很容易实现:
BAR = some_value
FOO = some_function(BAR)
然而,有很多设置文件是很流行的,每个环境都有一个(例如生产、开发、测试、阶段等),正如“Django 的两个勺子:Django 1.5 的最佳实践”一书中的项目布局中所建议的那样.
在这种情况下,有一个settings.base
模块,它的所有内容由settings.dev
,settings.prod
等导入,它们添加自己的特定值或覆盖在settings.base
.
当我想BAR
在其中一些模块中覆盖时会出现问题,但我必须记住FOO
每次覆盖后都重新计算。这很容易出错,而不是 DRY。
lambda 函数不起作用,因为该设置是可调用的,而不是结果值。内置函数/装饰器property
是理想的,但它只能在类中使用(新样式)。我不知道还有什么类似的。
想法?