Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django-Compressor throws UncompressableFileError

Tags:

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') 
like image 421
Chris Lawlor Avatar asked Oct 13 '11 13:10

Chris Lawlor


2 Answers

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.

like image 80
igolkotek Avatar answered Sep 20 '22 12:09

igolkotek


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

like image 21
ubiquitousthey Avatar answered Sep 20 '22 12:09

ubiquitousthey