将 Django 安装的应用程序分为开发和生产环境。

10

我有三个设置文件:

  • base.py (共享)
  • 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 *

我要如何区分已经安装的应用程序是在生产环境还是开发环境中?


显示完整的回溯信息。 - joel goldstick
1
如何在Django中管理本地和生产环境设置 - rfkortekaas
开发人员在您的情况下无法"看到"基础。您的代码需要在init中,或进行重新组织。但是,导入的模块(dev)不会从导入模块(init)继承命名空间,这个模块刚好将安装应用程序从基础导入。因此... 安装的应用程序没有出现在任何地方。很抱歉使用大写字母和下划线格式错误(在平板电脑键盘上),但这是核心问题。 - JL Peyret
当您需要访问基础或生产环境的设置时,无需进行包级别的导入。只需在DJANGO_SETTINGS_MODULE=project_name.settings.production中进行设置,并在production.py中使用from .base import *来覆盖需要更改的任何设置即可。 - jackotonye
3个回答

7

我只是在我的settings.py文件中测试DEBUG(假设在生产环境中DEBUG == FALSE),并按如下方式添加应用程序:

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

你为什么要使用元组而不是列表? - xtian

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

development.py (mine was settings_debug.py)

from base import *

ADD_INSTALLED_APP('debug_toolbar')

production.py

from base import *

0
使用extend将一个列表附加到另一个列表中,并将已安装的应用程序列为列表(方括号[]),而不是元组(())。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接