djangodjango-compressor

django-compressor CommandError: An error occurred during rendering file/path.html: Invalid class path 'css'


I'm trying to use django-compressor for my project. So far in my development environment, when I run python manage.py compress I been get this error CommandError: An error occurred during rendering D:path/to/a/template.html: Invalid class path 'css'

I have lots of template files spread across many apps. The error pops up randomly, pointing to a different template each time I run python manage.py compress.

I have also tried first running python manage.py collectstatic, but to no avail and nothing in the docs seem to mention this error

OS: Windows 10, Django==2.0.5, django-compressor==2.2

Relevant settings.py section below

DEBUG = True
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

COMPRESS_ROOT = STATIC_ROOT
COMPRESS_URL = STATIC_URL
COMPRESS_PARSER = 'compressor.parser.HtmlParser'
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_MANIFEST = 'compressor_manifest.json'
COMPRESS_CSS_FILTERS = {
    'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 
    'js': ['compressor.filters.jsmin.JSMinFilter']
}
COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'django_libsass.SassCompiler'),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)

Inside the <head></head> tag of my project's base.html template I have

{% load compress %}
{% load staticfiles %}
{% load static %}

{% compress css file %}
<link rel="stylesheet" href="{% static 'css/fname.css' %}">
{% endcompress %}

{% compress js file %}
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>
<script type="text/javascript" src="{% static 'js/fname.js' %}"></script>
{% endcompress %}

Solution

  • You must define COMPRESS_FILTERS instead of COMPRESS_CSS_FILTERS as the latter is only a backwards-compatible alias for the css key of the former. That is, your configuration should read:

    COMPRESS_FILTERS = {
        'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 
        'js': ['compressor.filters.jsmin.JSMinFilter']
    }