我在django项目中有三个设置文件,例如,在我的wsgi文件中,我可以这样做:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings_staging')
但是我的问题是,我将如何在项目中的其他任何地方导入?例如:
from settings import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
这不再是来自“设置”,而是来自“ settings_staging”。
答案 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,本地还是其他任何地方,您都可以正确设置所有设置。