私は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
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))
テンプレートの最初の{% 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 %}
(最初のリンクは を使用していません{{ STATIC_URL }}
が、2 番目のリンクは使用していることに注意してください)
そして、私はエラーログにこれを取得します:
[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 ファイルは 2 回処理され、2 回目は成功しています。ただし、facebox.css ファイルは 2 回目に失敗します。これ{{ STATIC_URL }}
は、ファイルが 2 回目に解析されるときにテンプレート コンテキストで が定義されていないためと考えられます。
を使用しないことで問題を解決できることは明らかですが{{ STATIC_URL }}
、それは受け入れられる解決策ではありません。
css ファイルが 2 回処理されるのはなぜですか? もともと持っていた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')