在开发与生产之间分离Django安装的应用程序

时间:2016-07-07 18:39:35

标签: python django django-settings django-apps

我有3个设置文件:

  • base.py(shared)
  • development.py
  • production.py

base.py有:

INSTALLED_APPS = (

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes'
    ...

但我在开发环境中有一些我只想要的应用程序,例如debug-toolbar

我在development.py中试过这个:

INSTALLED_APPS += (
    'debug_toolbar',
)

但是得到错误:NameError: name 'INSTALLED_APPS' is not defined

设置文件连接如下:

__init__.py

from .base import *

try:
    from .production import *
except:
    from .development import *

如何在生产/开发环境之间区分已安装的应用程序?

3 个答案:

答案 0 :(得分:3)

我自己处理了这个问题,我这样砍了它:

base.py (我的是settings.py)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes'
    ... )


# rest of settings.py variables ...

def _add_installed_app(app_name):
    global INSTALLED_APPS

    installed_apps = list(INSTALLED_APPS)
    installed_apps.append(app_name)
    INSTALLED_APPS = tuple(installed_apps)

ADD_INSTALLED_APP = _add_installed_app

development.py (我的是settings_debug.py)

from base import *

ADD_INSTALLED_APP('debug_toolbar')

production.py

from base import *

答案 1 :(得分:0)

我只是在settings.py中测试DEBUG(假设在生产环境中DEBUG == FALSE),然后添加应用程序:

# settings.py
if DEBUG:
    INSTALLED_APPS += (
        # Dev extensions
        'django_extensions',
        'debug_toolbar',
    )

答案 2 :(得分:0)

使用扩展将一个列表附加到另一个列表并将安装的应用程序状态为列表(方括号 [])而不是元组 (())