我正在尝试按照these instructions按环境拆分我的设置。
现在我想简单地运行我的测试命令:
var spawn = require("child_process").spawn;
var typings = spawn("./node_modules/.bin/typings", ["install"], { shell: true });
目前有以下一行
./run ./manage.py test --settings=bx.settings.local
在这些文件中可用
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bx.settings")
所以我删除它(因为它应该从命令行读取)。
我还在manage.py
wsgi.py
应用内创建了一个settings
文件夹并添加了文件
bx
到它。
<小时/>
注意:__init__.py
base.py
local.py
文件是这样的:
run
<小时/>
当我运行命令
时#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
docker run \
--env "PATH=/beneple/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
--link beneple_db:db \
-v $DIR:/beneple \
-t -i --rm \
beneple/beneple \
$@
我收到此错误
./run ./manage.py test --settings=bx.settings.local
在serializers.py:10中,我们得到了这个
File "/beneple/bx/org/serializers.py", line 10, in <module>
from bx.settings import DOMAIN
ImportError: cannot import name DOMAIN
所以我用
替换了from bx.settings import DOMAIN
bx.settings
而我得到了这个错误:
from django.conf import settings
from settings import DOMAIN
奇怪的是,如果我在 File "/beneple/bx/org/serializers.py", line 12, in <module>
from settings import DOMAIN
ImportError: No module named settings
之后放置一个断点,并键入以下内容:
from django.conf import settings
我很困惑为什么它不能将此处的设置识别为模块?
我注意到我的模板目录已更改。在我的设置文件中,我有
ipdb> print(settings)
<Settings "bx.settings.local">
ipdb> settings.DOMAIN
'http://localhost:8000'
但是请注意旧方式和新方式之间BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
..
TEMPLATES = [{
'DIRS': [os.path.join(BASE_DIR, 'templates')],..
的值的差异:
旧方式:
settings.TEMPLATES[0]['DIRS']
新方式:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bx.settings")
['/beneple/templates']
为什么会这样?以及如何(以编程方式)使新方法输出与旧方法相同的结果?
答案 0 :(得分:2)
从django.conf
导入设置后,您无法再次从设置导入;你已经有了设置对象,你可以直接引用settings.DOMAIN
。
答案 1 :(得分:1)
from settings import DOMAIN
尝试从settings
加载模块PYTHONPATH
,而不是从您已导入的模块加载。{/ p>
您可以执行以下操作:
DOMAIN = settings.DOMAIN