使用多个设置
Django 默认项目布局创建一个 settings.py
。这通常很有用,可以像这样拆分它:
myprojectroot/
myproject/
__init__.py
settings/
__init__.py
base.py
dev.py
prod.py
tests.py
这使你可以根据你是在开发,生产,测试还是其他任何方式使用不同的设置。
从默认布局移动到此布局时,原始 settings.py
变为 settings/base.py
。当每个其他子模块将通过 from .base import *
开始子类化settings/base.py
。例如,这是 settings/dev.py
的样子:
# -*- coding: utf-8 -*-
from .base import * # noqa
DEBUG = True
INSTALLED_APPS.extend([
'debug_toolbar',
])
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
INTERNAL_IPS = ['192.168.0.51', '192.168.0.69']
备选方案#1
要使 django-admin
命令正常工作,你必须设置 DJANGO_SETTINGS_MODULE
环境变量(默认为 myproject.settings
)。在开发中,你将其设置为 myproject.settings.dev
。在制作中,你将其设置为 myproject.settings.prod
。如果你使用 virtualenv,最好在你的 postactivate
脚本中设置它:
#!/bin/sh
export PYTHONPATH="/home/me/django_projects/myproject:$VIRTUAL_ENV/lib/python3.4"
export DJANGO_SETTINGS_MODULE="myproject.settings.dev"
如果你想使用 DJANGO_SETTINGS_MODULE
未指向的设置模块一次,你可以使用 django-admin
的 --settings
选项:
django-admin test --settings=myproject.settings.tests
备选方案#2
如果你想让 DJANGO_SETTINGS_MODULE
保持其默认配置(myproject.settings
),你可以通过将导入放在你的 __init__.py
文件中来告诉 settings
模块加载哪个配置。
在上面的例子中,通过将 __init__.py
设置为:可以实现相同的结果:
from .dev import *