找不到 Django 设置模块
Posted
技术标签:
【中文标题】找不到 Django 设置模块【英文标题】:Django settings module not found 【发布时间】:2016-12-03 22:14:51 【问题描述】:背景
我正在尝试通过关注these instructions 来按环境拆分我的设置。
现在我想像这样简单地运行我的测试命令:
./run ./manage.py test --settings=bx.settings.local
目前是下面一行
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bx.settings")
在这些文件中可用
manage.py
wsgi.py
所以我删除了它(因为它应该从命令行读取)。
我还在我的bx
应用程序中创建了一个settings
文件夹并添加了文件
__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
我收到此错误
File "/beneple/bx/org/serializers.py", line 10, in <module>
from bx.settings import DOMAIN
ImportError: cannot import name DOMAIN
在 serializers.py:10 中,我们得到了这个
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']
新方式:
./run ./manage.py test --settings=bx.settings.local
['/beneple/bx/templates']
为什么会这样?以及如何(以编程方式)使新方式输出与旧方式相同的结果?
【问题讨论】:
您不直接导入设置,而是从django.conf import settings
然后settings.DOMAIN
这样访问它们。
【参考方案1】:
从django.conf
导入设置后,不得再次从设置导入;你已经有了设置对象,你可以直接参考settings.DOMAIN
。
【讨论】:
这很有趣.. 但是为什么在我拥有from bx.settings import DOMAIN
之前它会起作用?它是否将bx.settings
视为一个模块而不是一个对象?如果是这样.. 为什么?
不,这与它无关,我不确定您对什么感到困惑。在直接从模块导入 DOMAIN 之前;但现在您尝试导入模块,然后在导入语句中再次引用该模块。
好的,我更新了我的问题(重新模板).. 我保证最后一次更新!
TEMPLATES = [ 'DIRS': [os.path.join(os.path.dirname(BASE_DIR), 'templates')],...
【参考方案2】:
from settings import DOMAIN
尝试从 PYTHONPATH
加载模块 settings
,而不是从您已经导入的模块。
您可以执行以下操作:
DOMAIN = settings.DOMAIN
【讨论】:
以上是关于找不到 Django 设置模块的主要内容,如果未能解决你的问题,请参考以下文章
django 频道配置不当:在 ASGI_APPLICATION 模块中找不到“应用程序”
找不到模块'corsheaders' django/heroku deploy