【发布时间】:2012-03-14 21:42:15
【问题描述】:
我创建了一个自定义存储后端,文件名为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)
在settings.py,我有以下内容:
STATICFILES_STORAGE = 'core.storages.S3StaticBucket'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
当我尝试执行 python manage.py collectstatic 时,它显示以下错误:
django.core.exceptions.ImproperlyConfigured: Error importing storage module core.storages: "No module named backends.s3boto"
当我运行 python manage.py shell 并尝试导入相同的内容时:
>>>
>>> from django.conf import settings
>>> from storages.backends.s3boto import S3BotoStorage
>>>
知道我做错了什么吗?
【问题讨论】:
-
你也可以在 shell 中导入
core.storages.S3StaticBucket吗?也许你错过了一个__init__.py文件。 -
刚刚尝试这样做,我得到了
ImportError: No module named backends.s3boto。我在应用程序core中有一个空的__init__.py。 -
嗯。尝试在 storages.py 中注释
from storages.backends.s3boto import S3BotoStorage行,并改为写import storages,然后在下一行print storages.__file__中。然后在 shell 中导入一个core.storages.S3StaticBucket。然后在shell中手动导入storages并打印storages.__file__。如果路径不同 - 你有你的答案。 -
它们确实是不同的路径!
storages.py中的storages指的是它自己(编译后的文件):/home/ubuntu/project/core/storages.pyc,而第二个storages指的是包本身:/usr/local/lib/python2.7/dist-packages/storages/__init__.pyc。因此,在storages.py中导入的storages似乎将自己视为默认存储,而不是settings.py中定义的存储,我不明白。知道为什么会这样吗? -
我在下面的答案中添加了一个可能的解决方案。
标签: django django-storage