簡體   English   中英

AttributeError:“設置”object 沒有屬性<class that i defined inside settings.py>當從 conf 導入設置時</class>

[英]AttributeError: 'Settings' object has no attribute <class that I defined inside settings.py> when settings imported from conf

我在settings.py文件中添加了enum

class Syncs(Enum):
    A = 'a'
    B = 'b'

當我嘗試通過from django.conf import settings導入來在應用程序中使用它們時,它會引發:

AttributeError: 'Settings' object has no attribute Syncs

另一方面,如果我直接導入設置文件,它可以工作

我知道這是因為from django.conf import settings的工作方式不同,所以這就是為什么這不起作用。 有什么推薦的方法嗎?

到目前為止,我這樣做:

class Syncs(Enum):
    A = 'a'
    B = 'b'

SYNCS = Syncs

本質上, settings object 是從設置模塊填充的惰性object。 它只會填充以大寫字母書寫的項目(可以帶有下划線之類的標點符號)。 事實上, 填充項目[GitHub]的源代碼說:

 for setting in dir(global_settings): if setting.isupper() : setattr(self, setting, getattr(global_settings, setting))

因此它將檢查設置是否滿足str.isupper()方法[Python-doc] ,如果滿足,則將其添加到 object 中,否則不滿足。 所以你需要用全大寫來定義它。 其背后的基本原理可能是設置是常量,在 Python 中,約定是常量以全大寫蛇形寫成。

您可以將枚舉定義為:

class SYNCS(Enum):
    A = 'a'
    B = 'b'

但這讓我想知道為什么要在設置中定義一個枚舉,這有點“奇怪”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM