取决于我是在演出还是制作中,我可以加载settings.production或settings.staging。
现在,我想检查是否设置了CROSS_SUBDOMAIN_COOKIE,但是我总是收到'Settings' object has no attribute 'CROSS_SUBDOMAIN_COOKIE'
。这仅在生产中发生,因为我的settings.staging没有加载到那里。在.staging中,我写了CROSS_SUBDOMAIN_COOKIE = True
from django.conf import settings
def mixpanel_id(self):
if settings.CROSS_SUBDOMAIN_COOKIE:
cross_subdomain_cookie = True
else:
cross_subdomain_cookie = False
答案 0 :(得分:2)
您可以使用getattr(..)
[Python-doc]并为其添加默认值,例如:
from django.conf import settings
def mixpanel_id(self):
if getattr(settings, 'CROSS_SUBDOMAIN_COOKIE', False):
cross_subdomain_cookie = True
else:
cross_subdomain_cookie = False
因此,这里我们默认设置False
。如果缺少CROSS_SUBDOMAIN_COOKIE
,我们将获得False
,否则getattr(..)
将返回属性的值。
请注意,返回if
/ else
的{{1}}-True
可以简化为:
False
并且如果属性总是 一个布尔值,我们甚至可以编写:
def mixpanel_id(self):
cross_subdomain_cookie = bool(getattr(settings, 'CROSS_SUBDOMAIN_COOKIE', False))
如果默认值为def mixpanel_id(self):
cross_subdomain_cookie = getattr(settings, 'CROSS_SUBDOMAIN_COOKIE', False)
或其他值,则可以用该值替换True
。