找不到 Django 设置模块

问题描述 投票:0回答:3

背景

我正在尝试按照这些说明按环境拆分我的设置。

现在我想简单地运行我的测试命令,如下所示:

./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

我收到此错误

  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']

为什么会这样?以及如何(以编程方式)使新方式输出与旧方式相同的结果?

python django python-2.7 unit-testing django-settings
3个回答
2
投票

django.conf
导入设置后,不得再次从设置导入;你已经有了设置对象,直接参考
settings.DOMAIN
即可。


1
投票

from settings import DOMAIN
尝试从
settings
加载模块
PYTHONPATH
,而不是从您已导入的模块。

您可以执行以下操作:

DOMAIN = settings.DOMAIN


0
投票

同一主题,但问题略有不同。如果您在项目中的同一个文件夹中维护设置,那么您有settings.py,现在您想要Project/local/gv并且其中有settings.py,它会给您一个错误 modulenotfounderror ,您必须删除原始的settings.py当您通过环境变量 DJANGO_SETTINGS_MODULE 设置它时,在项目文件夹中。

有人可以对此发表评论吗,解决方案是删除,但为什么?

© www.soinside.com 2019 - 2024. All rights reserved.