Django - 导入storages.backends时出错

Azi*_*ari 9 django django-storage

我创建了一个自定义存储后端,该文件被调用storages.py并放置在一个名为的应用程序中core:

from django.conf import settings
from storages.backends.s3boto import S3BotoStorage

class S3StaticBucket(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        kwargs['bucket_name'] = getattr(settings, 'static.mysite.com')
        super(S3BotoStorage, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

settings.py,我有以下内容:

STATICFILES_STORAGE = 'core.storages.S3StaticBucket'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做python manage.py collectstatic时显示以下错误:

django.core.exceptions.ImproperlyConfigured: Error importing storage module core.storages: "No module named backends.s3boto"
Run Code Online (Sandbox Code Playgroud)

当我运行python manage.py shell并尝试导入相同的:

>>> 
>>> from django.conf import settings
>>> from storages.backends.s3boto import S3BotoStorage
>>> 
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

Woj*_*tak 8

存在名称空间冲突; 在storage绝对名称与擦出storage本地名称.它可能不直观,但您可以从模块中导入:

// file my_module/clash.py
import clash
print clash.__file__
Run Code Online (Sandbox Code Playgroud)

现在我们在一个包含以下内容的目录中运行python shell my_module:

$ python
>>> import my_module.clash
my_module.clash.py
Run Code Online (Sandbox Code Playgroud)

简而言之,您的模块尝试从自身导入后端.

您需要绝对导入 - 尝试导入与内置模块同名的模块会导致导入错误.

  • 谢谢你,从__future__ import absolute_import`添加了`它现在有效. (2认同)

Par*_*ker 5

我有同样的问题,但对我来说,尽管django-storages已安装,但事实证明boto并没有。一个简单的pip install boto修复了我的场景中的错误。