首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-Compressor抛出UncompressableFileError

Django-Compressor抛出UncompressableFileError
EN

Stack Overflow用户
提问于 2011-10-13 21:38:12
回答 5查看 12.2K关注 0票数 24

我使用的是Django压缩和Django-Django文件(外部版本,我使用的是Django 1.2)。

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

代码语言:javascript
复制
TemplateSyntaxError: Caught UncompressableFileError while rendering: 'css/facebox.css' isn't accesible via COMPRESS_URL ('/static/') and can't be compressed

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

查看django-压缩器代码,我发现了抛出异常的地方:

代码语言:javascript
复制
 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))

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

代码语言:javascript
复制
{% 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 %}

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

我在我的错误日志中得到了如下信息:

代码语言:javascript
复制
[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/

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

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

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

相关设置:

代码语言:javascript
复制
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')
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-25 03:41:24

我也遇到了同样的问题。

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

票数 7
EN

Stack Overflow用户

发布于 2011-10-23 04:48:52

看起来STATIC_URL几乎不在您的上下文中。您确实配置了staticfiles上下文处理器,对吗?你有没有试着喜欢没有压缩器标签的文件?加载时{{ STATIC_URL }}是否在页面中正确显示?

我认为压缩器会检查url,即使它通过查看https://github.com/jezdez/django_compressor/blob/develop/compressor/base.py#L57的文件系统访问url

票数 1
EN

Stack Overflow用户

发布于 2013-06-16 07:12:43

这是一个古老的问题,但在搜索此错误消息时,这是为数不多的搜索结果之一,因此可能值得花点时间来分享我的解决方案。

在我的例子中,这是一个非常简单的情况:我硬编码了我的静态url,并在开始时忘记了/。所以我有了这个:

代码语言:javascript
复制
<link type="text/css" rel="stylesheet" href="static/style.css" />

这给了我一个错误。更改为以下内容后:

代码语言:javascript
复制
<link type="text/css" rel="stylesheet" href="/static/style.css" />

它已经修好了。当然,我后来意识到,我应该使用设置STATIC_URL:

代码语言:javascript
复制
<link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}style.css" />

希望这对任何人都有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7754980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档