Я использую django-compresor для приложения, развернутого на герой, с амазоном S3, обслуживающим статические файлы. Все работает отлично, за исключением того, что изображения в моем css, указанные в background-image: url() не отображаются с правильным путем.django-compressor: изображения CSS с дорожкой относительно папки
Мои статические файлы организованы в следующей структуре каталогов:
-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
Проблема заключается в том, что изображения в URL CSS файлы() отображаются в виде:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
и должно быть:
https://mybucket.s3.amazonaws.com/static/myapp/img/imagefile.png
или если изображения были скопированы в каталог КЭШ это будет работа:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
Моя временное решение заключается в изменении пути изображений в моем CSS к следующему, и она работает:
url("/static/foldername/img/icon.png")
Я новичок в компрессоре django &, поэтому я не уверен, каково должно быть правильное поведение, но это не кажется правильным. Как я вижу это, проблема может быть устранена, если я могу заставить компрессор django выполнить одну из двух задач: 1) скопировать все изображения, на которые ссылаются в css url(), в каталог CASHE/img OR 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
Im мышление должно быть какой-то параметр, который указывает компрессор для копирования CSS url ("../ img/image.png") в каталог CACHE/img ???
спасибо, я собираюсь изучить это и сообщить, если у меня такие же результаты. – arctelix
FWIW, этот метод не работал для меня. Мне пришлось вернуться к методу лямбда, потому что это, по крайней мере, частично сработало. Я использую django-compressor == 1.3, django-storages == 1.1.4 и boto == 2.8.0. – Brent
Не повезло и здесь. – arctelix