Django:无法从设置中导入自定义变量

时间:2016-05-19 13:22:14

标签: django

我在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。幸运的是,我不是那样做的。

2 个答案:

答案 0 :(得分:1)

导入失败,因为您没有关注django guidelines

用于创建自己的设置。

  
      
  1. 设置名称必须全部为大写。
  2.   
  3. 不要重新发明已存在的设置。
  4.         

    请注意,您的代码不应从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