我在settings.py中定义了自定义变量mongo_db
:
# connect to test database for tests and real database otherwise
if is_test():
mongo_db = mongoengine.connect(db='test-workflows', host='workflows-mongo')
else:
mongo_db = mongoengine.connect(db='workflows', host='workflows-mongo')
现在,我正在尝试从tests.py
(或从python manage.py shell
)导入它,两者都失败了:
from django.conf import settings
settings.mongo_db
AttributeError: 'Settings' object has no attribute 'mongo_db'
怎么了?
更新
IIRC,Django通过使用django.conf.settings
中定义的值覆盖其默认设置对象django.conf.global_settings
来构建settings.py
。
因此,from django.conf import settings; settings.mongo_db
可能出现的问题是,Django可能无法使用django.conf.settings
更新mongo_db
,因为它不属于默认选项。
此外,Django documentation says django.conf.settings
是对象,而非模块,因此您无法说from django.conf.settings import VARIABLE
。幸运的是,我不是那样做的。
答案 0 :(得分:1)
导入失败,因为您没有关注django guidelines。
用于创建自己的设置。
- 设置名称必须全部为大写。
- 不要重新发明已存在的设置。
醇>请注意,您的代码不应从global_settings或您自己的设置文件导入。
django.conf.settings抽象出默认设置和特定于站点的设置的概念;它提供了一个单一的界面。
像这样在settings.py中更改您的代码。 (将mongo_db
替换为MONGO_DB
)
if is_test():
MONGO_DB = mongoengine.connect(db='test-workflows', host='workflows-mongo')
else:
MONGO_DB = mongoengine.connect(db='workflows', host='workflows-mongo')
现在您可以从django shell和所有其他地方导入。
答案 1 :(得分:0)
您尝试从django的设置导入而不是您自己的settings.py
from django.conf import settings
应该是
from your_app import settings