使用多個設定

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 *