Sto usando django-compresor per un'applicazione distribuita su heroku con Amazon S3 che serve file statici. Funziona tutto bene tranne che le immagini nel mio css di riferimento nell'immagine di sfondo: url() non sono visualizzate con il percorso corretto.django-compressor: immagini CSS con percorso relativo alla cartella
I miei file statici sono organizzati nel seguente struttura di directory:
-static
-myapp
-js
-css
-img
-bootstrap
-js
-css
-img
-othervendor
-js
-css
-img
Pertanto, il percorso sto usando nella URL() è relativo al file css:
url("../img/icon.png")
Tutto i miei file css vengono compressi e spostati nella cartella CACHE nella mia directory statica e l'url della directory CACHE viene visualizzato correttamente come:
Il problema è che le immagini nel file CSS url() sono resi come:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
e dovrebbe essere:
https://mybucket.s3.amazonaws.com/static/myapp/img/imagefile.png
o se le immagini sono state copiate nella cartella CACHE questo sarebbe lavoro:
https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
la mia soluzione temporanea è quello di cambiare i percorsi delle immagini nella mia css al seguente e funziona:
url("/static/foldername/img/icon.png")
Sono nuovo al compressore django & quindi non sono sicuro di quale dovrebbe essere il comportamento corretto, ma questo non sembra essere corretto. Il modo in cui lo vedo, il problema può essere risolto se riesco a ottenere compressore django per fare una delle due cose: 1) copiare tutte le immagini di riferimento in css url() alla directory CASHE/img OR 2) rendere l'url corretto rappresentato da ../ Ecco il mio setup:
I file css nel mio modello sono in un blocco {% compress css%}.
s3utils.py (usato per fare supporti separati e le directory statica nel mio secchio)
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 pensiero ci deve essere qualche impostazione che racconta del compressore per copiare css url ("../ img/image.png") alla directory CACHE/img ???
grazie, ho intenzione di esaminare questo e ti faccio sapere se ho gli stessi risultati. – arctelix
FWIW, questo metodo non ha funzionato per me. Ho dovuto tornare al metodo lambda perché almeno parzialmente funzionava. Sto usando django-compressor == 1.3, django-storages == 1.1.4 e boto == 2.8.0. – Brent
Niente fortuna neanche qui. – arctelix