当我在本地和生产中运行我的项目时,我想有不同的 settings.py,因为我在 settings.py 中有一个设置强制我的项目使用 https,但 django runserver.py 只能使用 http,不能https,所以我现在无法在本地运行我的项目。另外,我希望在我的计算机上设置 debug=True,并在生产环境中设置 debug=False。那么如何为我的计算机和生产使用不同的 settings.py 呢?
答案 0 :(得分:1)
有一些选项,其中一个用于创建两个设置文件:
将以下添加到settings.py的末尾:
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
DEBUG = False
...
...
##################
# LOCAL SETTINGS #
##################
# Allow any settings to be defined in local_settings.py which should be
# ignored in your version control system allowing for settings to be
# defined per machine.
f = os.path.join(PROJECT_APP_PATH, "local_settings.py")
if os.path.exists(f):
import sys
import imp
module_name = "%s.local_settings" % PROJECT_APP
module = imp.new_module(module_name)
module.__file__ = f
sys.modules[module_name] = module
exec(open(f, "rb").read())
创建 local_settings.py 并覆盖所需的设置:
#####################
# OVERWRITE SETTINGS #
#####################
DEBUG = True
SECURE_PROXY_SSL_HEADER = None
SECURE_SSL_REDIRECT = False
...
答案 1 :(得分:0)
您可以有一个名为 settings 的文件夹,其中包含用于基本设置、开发设置、暂存设置、生产设置和测试设置的不同 python 文件。
可以将基本设置导入到开发、暂存、生产和测试设置中,然后您可以设置现有变量的值(例如 DEBUG)或定义新变量。
树结构可以是:
然后你可以使用它们,例如:
$ python manage.py runserver --settings={your-project-name}.settings.dev
对于部署,您可以通过 env 变量传递正确的设置(例如在 docker 图像的情况下)