【问题标题】:Separating Django installed apps between Development vs Production在开发与生产之间分离 Django 安装的应用程序
【发布时间】:2016-11-10 05:11:17
【问题描述】:

我有 3 个设置文件:

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

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

【问题讨论】:

  • 显示完整的回溯
  • Dev 在您的情况下没有“看到”基础。您的代码需要在 init 中。或重组。但是导入的模块 (dev) 不会从导入模块 (init) 继承命名空间,而导入模块 (init) 恰好从 base 引入已安装的应用程序。所以...已安装的应用程序无处可见。很抱歉大写和下划线错误输入(在平板电脑键盘上),但这是这里的核心问题。
  • 当您需要访问基本或生产DJANGO_SETTINGS_MODULE=project_name.settings.production 和生产.py 中from .base import * 的设置并覆盖任何需要更改的设置时,您不需要包级导入。

标签: python django django-settings django-apps


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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 *
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-10-23
        • 2016-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-05
        • 2011-07-02
        • 2017-01-21
        • 1970-01-01
        相关资源
        最近更新 更多