如果导入多个设置文件怎么办

时间:2018-10-10 03:56:16

标签: python django

我在django项目中有三个设置文件,例如,在我的wsgi文件中,我可以这样做:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings_staging')

但是我的问题是,我将如何在项目中的其他任何地方导入?例如:

from settings import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

这不再是来自“设置”,而是来自“ settings_staging”。

2 个答案:

答案 0 :(得分:3)

您不会直接从设置文件导入设置,而是通过django.conf.settings加载设置。来自documentation

  

在Django应用中,通过导入对象django.conf.settings使用设置。示例:

from django.conf import settings

if settings.DEBUG:
       # Do something

django.conf.settings本身将根据您在wsgi.py中指定的设置模块正确加载要使用的设置文件。

manage.py还会查找一个环境变量,以指定要使用的设置模块,因此您可以通过设置环境变量来选择要使用的设置模块,例如:

export DJANGO_SETTINGS_MODULE=settings_development
./manage.py runserver

答案 1 :(得分:1)

另一种可能的方法,最后我要做的是拥有一个设置文件,然后是一个STAGE,您可以在其中导入更敏感的凭据。看起来像这样:

# settings.py

# Part1 -- all my initial settings

# Part2 -- load in any sensitive variables
if STAGE == 'LOCAL':
    pass
elif STAGE == 'STAGING':
    from settings_staging import *
elif STAGE == 'PRODUCTION':
    from settings_production import *

# Part3 -- finish up loading settings, such as DB, CACHE, etc.

在wsgi文件中,您可以执行以下操作:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
os.environ.setdefault('STAGE', 'staging')

通过这种方式,只需更改STAGE环境-无论是wsgi,本地还是其他任何地方,您都可以正确设置所有设置。