2012-02-24 28 views
9

Hata ithal storages.backends, dosya storages.py denir ve bir uygulama yerleştirilir core seslendi: settings.py yılındaDjango - Özel bir depolama arka uç oluşturduk

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) 

, ben follwing var:

STATICFILES_STORAGE = 'core.storages.S3StaticBucket' 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

Ben şu hatayı gösterir python manage.py collectstatic yapmaya çalıştığınızda:

django.core.exceptions.ImproperlyConfigured: Error importing storage module core.storages: "No module named backends.s3boto" 

Ve python manage.py shell çalıştırın ve denediğinizde ithal etmek aynı: Yanlış ne yaptığımı

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

fikrin var mı?

+0

bir içe yapabiliyor musunuz 'çekirdek .storages.S3StaticBucket 'de kabukta? Belki orada bir "__init __. Py" dosyasını kaçırdın. –

+0

Sadece denedim, 'ImportError' var: backends.s3boto' adlı bir modül yok. "Çekirdek" uygulamasında boş bir __init __. Py 'var. – abstractpaper

+0

Hm. Storages.py'deki storages.backends.s3boto içe aktarma S3BotoStorage satırından bir yorum yapmaya çalışın ve bunun yerine bir "içe aktarma depoları" yazın ve ardından aşağıdaki satırı yazın "yazdırma storages .__ file__". Ardından kabukta bir 'core.storages.S3StaticBucket 'dosyasını içe aktarın. Daha sonra, "storages" öğesini el ile içe aktarın ve storages .__ file__' dosyasını yazdırın. Yollar farklıysa - cevabınızı aldınız. –

cevap

7

Ad alanı çakışması var; storage mutlak ad, storage yerel adıyla çakışıyor. Bu unintuitive olabilir, ancak kendi içinde modülden alabilirsiniz:

// file my_module/clash.py 
import clash 
print clash.__file__ 

Şimdi bir my_module içeren bir dir piton kabuk çalıştırın: Kısacası

$ python 
>>> import my_module.clash 
my_module.clash.py 

, senin modülü arka uç almaya çalışır kendinden.

Mutlak bir içeriğe ihtiyacınız var - Trying to import module with the same name as a built-in module causes an import error.

+2

Teşekkür ederim, __future__ import absolute_import''dan eklendi ve şimdi çalışıyor. – abstractpaper

4

Aynı sorunu yaşadım, ancak benim için django-storages yüklenmesine rağmen boto'un olmadığı ortaya çıkıyor. Basit bir pip install boto, senaryodaki hatayı giderdi.

4

Başkalarına yardımcı olabilecek başka bir sorunla karşılaştım, storages.py adlı başka bir dosyam vardı ama bu dosyayı gün önce sildim ve hala Özel Durum'u aldım ... dosya silinmemişti storages.pyc!

+1

Evet, bu bana da oldu. – ilovett

0

Yazım hatası. Değişikliği:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

İÇİN:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3Boto3Storage'

İlgili konular