我正在尝试模拟django的设置文件。我已经建立了一个模型来托管一些可以由管理员更改的设置。这些概念很好用,但是当值改变时它的表现很奇怪,代码没有获得新的变化。
这是我的core_settings
class CoreSettings(object):
def __getattr__(self, item):
try:
return Configuration.objects.get(key=item).value
except Configuration.DoesNotExist :
return getattr(settings, item)
core_settings = CoreSettings()
基本上使用上面的内容如下
SF_PUBLICATION_PAGINATION_PP = int(getattr(core_settings, 'SF_PUBLICATION_PAGINATION_PP'))
SF_PUBLICATION_PAGINATION_PP从配置模型中获取正确的值,但是当我更新字段值时,它没有反映出来。只有当我更改文件导致它重新编译时才会进行更改..
有什么想法吗?
更新
似乎只有在刷新runserver时才会看到更改。
答案 0 :(得分:2)
是的,您的设置值未被刷新,因为当您的settings.py被加载时会设置其值,例如,当您执行“runserver”时会发生这种情况。在开发环境中。
所以,你可以处理,做这样的事情:
def get_live_setting(key):
try:
return Configuration.objects.get(key=key).value
except Configuration.DoesNotExist :
return getattr(settings, key)
# get SF_PUBLICATION_PAGINATION_PP's value
get_live_setting('SF_PUBLICATION_PAGINATION_PP')
有了这个你可以解决你的问题,但正确的方法是使用延迟评估,here一些示例和here一个关于' lazy-python'的有趣帖子。
答案 1 :(得分:1)
使用专为此目的而设计的包装怎么样?
即使您决定不使用它,您也可以随时了解它是如何完成的!
关于您的具体问题。你如何更新字段值?您确定从数据库而不是从except
子句中检索了值吗?