在开发与生产之间分离 Django 安装的应用程序
Posted
技术标签:
【中文标题】在开发与生产之间分离 Django 安装的应用程序【英文标题】:Separating Django installed apps between Development vs Production 【发布时间】:2016-11-10 05:11:17 【问题描述】:我有 3 个设置文件:
base.py(共享) 开发.py 生产.pybase.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 *
如何区分我的生产/开发环境中安装的应用程序?
【问题讨论】:
显示完整的回溯 重复***.com/questions/1626326/… Dev 在您的情况下没有“看到”基础。您的代码需要在 init 中。或重组。但是导入的模块 (dev) 不会从导入模块 (init) 继承命名空间,而导入模块 (init) 恰好从 base 引入已安装的应用程序。所以...已安装的应用程序无处可见。很抱歉大写和下划线错误输入(在平板电脑键盘上),但这是这里的核心问题。 当您需要访问基本或生产DJANGO_SETTINGS_MODULE=project_name.settings.production
和生产.py 中from .base import *
的设置并覆盖任何需要更改的设置时,您不需要包级导入。
【参考方案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 将一个列表附加到另一个列表,并将已安装的应用程序声明为列表(方括号 [])而不是元组 (())
【讨论】:
以上是关于在开发与生产之间分离 Django 安装的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
django 与 vue 的完美结合 实现前后端的分离开发之后在整合