I'm using django-compressor and django-staticfiles (the external version, I'm on Django 1.2).
When I try to load my site, I get an error:
TemplateSyntaxError: Caught UncompressableFileError while rendering: 'css/facebox.css' isn't accesible via COMPRESS_URL ('/static/') and can't be compressed
I've verified COMPRESS_URL
is equal to STATIC_URL
, and the file is actually accessible at that URL.
Looking at the django-compressor code, I found where that exception is thrown:
def get_basename(self, url): try: base_url = self.storage.base_url except AttributeError: base_url = settings.COMPRESS_URL # I added the following print statement: print "url: %s, base_url: %s" % (url, base_url) if not url.startswith(base_url): raise UncompressableFileError("'%s' isn't accesible via " "COMPRESS_URL ('%s') and can't be " "compressed" % (url, base_url))
The first {% compress css %}
block in my templates is this:
{% compress css %} <link rel="stylesheet" href="/static/css/blueprint/screen.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/facebox.css" /> {% endcompress %}
(Note that the first link doesn't use {{ STATIC_URL }}
, but the second one does)
And I get this in my error log:
[Thu Oct 13 08:19:13 2011] [error] url: /static/css/blueprint/screen.css, base_url: /static/ [Thu Oct 13 08:19:13 2011] [error] url: /static/css/facebox.css, base_url: /static/ [Thu Oct 13 08:19:14 2011] [error] url: /static/css/blueprint/screen.css, base_url: /static/ [Thu Oct 13 08:19:14 2011] [error] url: css/facebox.css, base_url: /static/
As you can see, the screen.css file is processed twice, and successful the second time around. The facebox.css file, however, fails the second time, presumable because the {{ STATIC_URL }}
isn't defined in the template context the second time the file is parsed.
Obviously I could solve the problem by not using {{ STATIC_URL }}
, but that is not an acceptable solution.
Why would my css files be processed twice? They originally had media='screen, projection'
, but I removed that thinking it was causing the problem.
Relevant settings:
In [4]: from compressor.conf import settings In [5]: settings.COMPRESS_ROOT Out[5]: '/home/ianchat/static_files' In [6]: settings.STATIC_ROOT Out[6]: '/home/ianchat/static_files' In [7]: settings.COMPRESS_URL Out[7]: '/static/' In [8]: settings.STATIC_URL Out[8]: '/static/' In [9]: settings.COMPRESS_OUTPUT_DIR Out[9]: 'CACHE' In [10]: settings.COMPRESS_CSS_FILTERS Out[10]: ['compressor.filters.csstidy.CSSTidyFilter'] In [11]: settings.STATICFILES_FINDERS Out[11]: ('staticfiles.finders.FileSystemFinder', 'staticfiles.finders.AppDirectoriesFinder', 'staticfiles.finders.LegacyAppDirectoriesFinder', 'compressor.finders.CompressorFinder')
I bumped into the same issue.
The answer was found here: https://github.com/jezdez/django_compressor/pull/206 The link's solution is doing handler500. I decided to change 500.html template to avoid any {{STATIC_URL}} in it and the problem was solved.
It almost looks like STATIC_URL is not in your context. You do have the staticfiles contextprocessor configured, right? Have you tried to like the file without the compressor tags? Does {{ STATIC_URL }} show up correctly in the page when you load it?
I think compressor checks the url even if it accesses it through the file system looking at https://github.com/jezdez/django_compressor/blob/develop/compressor/base.py#L57
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With