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

43T*_*cts 8 python django django-apps django-settings

我有 3 个设置文件:

  • base.py(共享)
  • 开发.py
  • 生产.py

base.py 有:

INSTALLED_APPS = (

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes'
    ...
Run Code Online (Sandbox Code Playgroud)

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

我在 development.py 中试过这个:

INSTALLED_APPS += (
    'debug_toolbar',
)
Run Code Online (Sandbox Code Playgroud)

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

设置文件的连接方式如下:

__init__.py

from .base import *

try:
    from .production import *
except:
    from .development import *
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ush 5

我自己处理了这个问题,我是这样破解的:

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
Run Code Online (Sandbox Code Playgroud)

development.py (我的是settings_debug.py)

from base import *

ADD_INSTALLED_APP('debug_toolbar')
Run Code Online (Sandbox Code Playgroud)

生产.py

from base import *
Run Code Online (Sandbox Code Playgroud)


小智 5

我只是在我的 settings.py 中测试 DEBUG(假设在生产 DEBUG == FALSE)并添加应用程序:

# settings.py
if DEBUG:
    INSTALLED_APPS += (
        # Dev extensions
        'django_extensions',
        'debug_toolbar',
    )
Run Code Online (Sandbox Code Playgroud)