[英]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.