<p>使用以下布局而不是<code>settings.py</code>:</p>
<pre><code>.
└── settings/
├── __init__.py <= not versioned
├── common.py
├── dev.py
└── prod.py
</code></pre>
<p><code>common.py</code>是大多数配置所在的位置。</p>
<p><code>prod.py</code>从common导入所有内容,并覆盖需要覆盖的内容:</p>
<pre><code>from __future__ import absolute_import # optional, but I like it
from .common import *
# Production overrides
DEBUG = False
#...
</code></pre>
<p>类似地,<code>dev.py</code>从<code>common.py</code>导入所有内容,并覆盖它需要覆盖的任何内容。</p>
<p>最后,<code>__init__.py</code>是决定要加载哪些设置的地方,也是存储机密的地方(因此不应对该文件进行版本控制):</p>
<pre><code>from __future__ import absolute_import
from .prod import * # or .dev if you want dev
##### DJANGO SECRETS
SECRET_KEY = '(3gd6shenud@&57...'
DATABASES['default']['PASSWORD'] = 'f9kGH...'
##### OTHER SECRETS
AWS_SECRET_ACCESS_KEY = "h50fH..."
</code></pre>
<p>我喜欢这个解决方案是:</p>
<ol>
<li>所有的东西都在你的版本控制系统中,除了秘密</li>
<li>大多数配置都在一个地方:<code>common.py</code>。</li>
<li>产品特定的东西进入<code>prod.py</code>,开发特定的东西进入<code>dev.py</code>。很简单。</li>
<li>您可以重写<code>prod.py</code>或<code>dev.py</code>中<code>common.py</code>的内容,也可以重写<code>__init__.py</code>中的任何内容。</li>
<li>很简单的python。没有再进口黑客。</li>
</ol>