【发布时间】:2013-08-04 06:01:30
【问题描述】:
(也许这个问题更多是关于 Python,但 Django 是上下文,所以就这样吧)
假设您需要一个设置FOO,其值取决于设置BAR 的值(最简单的情况是使CELERY_RESULT_BACKEND 等于BROKER_URL)。
如果你只有一个设置文件,那很容易实现:
BAR = some_value
FOO = some_function(BAR)
然而,有很多设置文件是很流行的,每个环境(例如生产、开发、测试、阶段等)一个,正如《Django 的两个勺子:最佳实践》一书中的project layout 中所建议的那样对于 Django 1.5"。
在这种情况下,有一个 settings.base 模块,它的所有内容由 settings.dev、settings.prod 等导入,它们添加自己的特定值或覆盖 settings.base 中定义的值。
当我想在其中一些模块中覆盖 BAR 时会出现问题,但我必须记住每次覆盖后都重新计算 FOO。这很容易出错,而且不会 DRY。
lambda 函数不起作用,因为该设置是可调用的,而不是结果值。内置函数/装饰器property 是理想的,但它只能在类中使用(新型)。我不知道其他类似的东西。
想法?
【问题讨论】:
-
嗯。这有点不整洁,但也许将您的依赖设置拆分为不同的文件并在设置 BAR 后导入?