-
Notifications
You must be signed in to change notification settings - Fork 48
SASS support using django compressor
Saurabh Kumar edited this page May 11, 2016
·
3 revisions
Follow this guide to add SASS
support with autoprefix.
Add the following to requirements/common.txt
:
# Static files
# -------------------------------------
django-compressor==2.0
django-libsass==0.7
django-compressor-autoprefixer==0.1.0
Create a package.json
file at root folder with following content:
{
"name": "django-compressor-helpers",
"version": "0.1.0",
"description": "Installs commandline tools needed by django-compressor for post-processing of css/js.",
"engines": {
"node": "5.11.0"
},
"dependencies": {
"autoprefixer": "^6.1.1",
"postcss-cli": "^2.3.2"
}
}
INSTALLED_APPS += ('compressor', )
COMPRESS_CSS_FILTERS = [
'django_compressor_autoprefixer.AutoprefixerFilter',
'compressor.filters.cssmin.CSSMinFilter',
]
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
COMPRESS_PRECOMPILERS = (
('text/x-scss', 'django_libsass.SassCompiler'),
)
COMPRESS_ENABLED = True
Add the following to settings/production.py
:
# Compress static files offline
# http://django-compressor.readthedocs.org/en/latest/settings/#django.conf.settings.COMPRESS_OFFLINE
COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
COMPRESS_OFFLINE = True
Edit base.html
to add:
{% load compress %}
...
{% compress css %}
<link href="{% static 'css/main.scss' %}" type="text/x-scss" rel="stylesheet">
{% endcompress %}
...
{% compress js %}
<script src="{% static 'js/main.js' %}"></script>
{% endcompress %}
And rename the static/css/main.css
to static/css/main.scss
.
Update wsgi.py
integrate django-compressor with whitenoise:
from whitenoise.django import DjangoWhiteNoise
# ...
class DjangoCompressorWhiteNoise(DjangoWhiteNoise):
"""A sub-class of DjangoWhiteNoise to play nice with django compressor.
DjangoWhiteNoise by-default doesn't add forever caching headers on the files
generated with django-compressor as it doen't treat them as immutable. See
original implementation of `is_immutable_file` for more details.
"""
def is_immutable_file(self, path, url):
"""Determine whether given URL represents an immutable file.
Adds a rule to the default implementation so that all the files in the
COMPRESS_OUTPUT_DIR are recognized as immutable as well.
"""
is_immutable = super(DjangoCompressorWhiteNoise, self).is_immutable_file(path, url)
if not is_immutable:
from django.conf import settings
if settings.COMPRESS_OUTPUT_DIR in url:
return True
return is_immutable
application = DjangoCompressorWhiteNoise(get_wsgi_application())
Add the following to bin/post_compile
:
# Offline compression of staticfiles via django-compressor
python manage.py compress
Run the following to be able to
heroku buildpacks:set heroku/python --app=<heroku-app-name>
heroku buildpacks:add --index 1 heroku/nodejs --app=<heroku-app-name>