Django 使用多种设置

示例

Django默认项目布局会创建一个settings.py。像这样拆分它通常很有用:

myprojectroot/
    myproject/
        __init__.py
        settings/
            __init__.py
            base.py
            dev.py
            prod.py
            tests.py

这使您可以根据自己是处于开发,生产,测试还是其他状态来使用不同的设置。

从默认布局移至该布局时,原始布局settings.py变为settings/base.py。当每个其他子模块都将以settings/base.py开头的“子类”时from .base import *。例如,这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可以使用以下--settings选项django-admin:

django-admin test --settings=myproject.settings.tests

选择#2

如果您想保留DJANGO_SETTINGS_MODULE其默认配置(myproject.settings),只需settings将导入__init__.py文件放入文件中即可告诉模块要加载哪种配置。

在上面的示例中,通过__init__.py设置为:

from .dev import *