使用多个设置

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 *