Django-Compressor抛出UncompressableFileError

Chr*_*lor 23 django django-staticfiles django-compressor

我正在使用django-compressor和django-staticfiles(外部版本,我在Django 1.2上).

当我尝试加载我的网站时,我收到一个错误:

TemplateSyntaxError: Caught UncompressableFileError while rendering: 'css/facebox.css' isn't accesible via COMPRESS_URL ('/static/') and can't be compressed
Run Code Online (Sandbox Code Playgroud)

我已经验证COMPRESS_URL等于STATIC_URL,并且该文件实际上可以通过该URL访问.

看看django-compressor代码,我发现抛出异常的地方:

 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))
Run Code Online (Sandbox Code Playgroud)

{% compress css %}我的模板中的第一个块是这样的:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

(注意第一个链接不使用{{ STATIC_URL }},但第二个链接不使用)

我在错误日志中得到了这个:

[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/
Run Code Online (Sandbox Code Playgroud)

如您所见,screen.css文件被处理两次,第二次成功.但是,facebox.css文件第二次失败,因为{{ STATIC_URL }}第二次解析文件时模板上下文中没有定义它.

显然我可以通过不使用来解决问题{{ STATIC_URL }},但这不是一个可接受的解决方案.

为什么我的css文件会被处理两次?他们最初有media='screen, projection',但我删除了认为它导致了问题.

相关设置:

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')
Run Code Online (Sandbox Code Playgroud)

aih*_*iho 6

我碰到了同样的问题.

答案在这里找到:https://github.com/jezdez/django_compressor/pull/206 该链接的解决方案正在处理handler500.我决定更改500.html模板以避免其中的任何{{STATIC_URL}},问题就解决了.