Django:“设置”对象没有属性

时间:2018-09-20 08:13:40

标签: python django

取决于我是在演出还是制作中,我可以加载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

1 个答案:

答案 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