Я использую django-compresor для приложения, развернутого на героку, с amazon S3, обслуживающим статические файлы. Все работает нормально, за исключением того, что изображения в моем css, на которые есть ссылки в background-image: url(), не отображаются с правильным путем.
Мои статические файлы организованы в следующую структуру каталогов:
-static
-myapp
-js
-css
-img
-bootstrap
-js
-css
-img
-othervendor
-js
-css
-img
Поэтому путь, который я использую в url(), относится к файлу css:
url("../img/icon.png")
Все мои файлы css сжимаются и перемещаются в папку CACHE в моем статическом каталоге, а URL-адрес каталога CACHE отображается правильно:
https://mybucket.s3.amazonaws.com/static/CACHE/css/somehash.css
Проблема в том, что изображения в файлах css url() отображаются как:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
и это должно быть:
https://mybucket.s3.amazonaws.com/static/myapp/img/imagefile.png
или если изображения были скопированы в каталог CACHE, это сработает:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
Мое временное исправление состоит в том, чтобы изменить пути изображений в моем css на следующее, и оно работает:
url("/static/foldername/img/icon.png")
Я новичок в django и компрессоре, поэтому я не уверен, каким должно быть правильное поведение, но это не похоже на правильное. Как я это вижу, проблема может быть решена, если я смогу заставить компрессор django сделать одну из двух вещей: 1) скопировать все изображения, на которые есть ссылки в css url(), в каталог CASHE/img ИЛИ 2) отобразить правильный URL-адрес, представленный ../ Вот моя установка:
Файлы css в моем шаблоне находятся в блоке {% Compress css %}.
s3utils.py (используется для создания отдельных медиа- и статических каталогов в моей корзине)
from storages.backends.s3boto import S3BotoStorage
StaticS3BotoStorage = lambda: S3BotoStorage(location='static')
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaS3BotoStorage = lambda: S3BotoStorage(location='media')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
settings.py
DEFAULT_FILE_STORAGE = 'myapp.settings.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'myapp.settings.s3utils.StaticRootS3BotoStorage'
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = S3_URL+'media/'
MEDIA_ROOT = S3_URL+'media/'
STATIC_URL = S3_URL+'static/'
STATIC_ROOT = S3_URL+'static/'
COMPRESS_STORAGE = STATICFILES_STORAGE
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
Я думаю, что должна быть какая-то настройка, которая говорит компрессору копировать URL css("../img/image.png") в каталог CACHE/img???