Django settings module not found
背景
我正试图按照这些说明按环境拆分设置。
现在我只想这样运行我的测试命令:
1 | ./run ./manage.py test --settings=bx.settings.local |
当前的下一行
1 | os.environ.setdefault("DJANGO_SETTINGS_MODULE","bx.settings") |
在这些文件中可用
1 2 | manage.py wsgi.py |
所以我删除了它(因为它应该从命令行中读取)。
我还在我的
1 2 3 | __init__.py base.py local.py |
对它。
笔记注:
1 2 3 4 5 6 7 8 9 | #!/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 \ $@ |
问题
当我运行命令时
1 | ./run ./manage.py test --settings=bx.settings.local |
我得到这个错误
1 2 3 | File"/beneple/bx/org/serializers.py", line 10, in <module> from bx.settings import DOMAIN ImportError: cannot import name DOMAIN |
在序列化程序中。Py:10,我们得到了这个。
1 | from bx.settings import DOMAIN |
所以我用
1 2 | from django.conf import settings from settings import DOMAIN |
相反,我得到了这个错误:
1 2 3 | File"/beneple/bx/org/serializers.py", line 12, in <module> from settings import DOMAIN ImportError: No module named settings |
调试
奇怪的是,如果我在
1 2 3 4 | ipdb> print(settings) <Settings"bx.settings.local"> ipdb> settings.DOMAIN 'http://localhost:8000' |
我很困惑为什么它不能将这里的设置识别为一个模块?
更新我注意到我的模板目录改变了。在我的设置文件中
1 2 3 4 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) .. TEMPLATES = [{ 'DIRS': [os.path.join(BASE_DIR, 'templates')],.. |
然而,注意旧路和新路之间的
老路:
1 2 | os.environ.setdefault("DJANGO_SETTINGS_MODULE","bx.settings") ['/beneple/templates'] |
新方法:
1 2 | ./run ./manage.py test --settings=bx.settings.local ['/beneple/bx/templates'] |
为什么会这样?我如何(以编程方式)使新方法输出与旧方法相同的结果?
从
您可以执行以下操作: