24

私は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')
4

5 に答える 5

7

私は同じ問題にぶつかりました。

答えはここで見つかりました: https://github.com/jezdez/django_compressor/pull/206 リンクの解決策は handler500 を実行しています。500.html テンプレートを変更して {{STATIC_URL}} を避けることにし、問題は解決しました。

于 2012-06-24T19:41:24.070 に答える
1

STATIC_URL がコンテキストにないように見えます。staticfiles contextprocessor が構成されていますよね? 圧縮タグなしでファイルを好きにしようとしましたか? ページを読み込んだときに {{ STATIC_URL }} がページに正しく表示されますか?

https://github.com/jezdez/django_compressor/blob/develop/compressor/base.py#L57を見ているファイルシステムを介してアクセスしても、コンプレッサーはURLをチェックすると思います

于 2011-10-22T20:48:52.053 に答える
1

これは古い質問ですが、このエラー メッセージを検索したときの数少ない検索結果の 1 つなので、私の解決策を共有する価値があるかもしれません。

私の場合、それは非常に単純なケースでした。静的 URL をハードコーディング/し、最初に を忘れていました。だから私はこれを持っていました:

<link type="text/css" rel="stylesheet" href="static/style.css" />

エラーが発生しました。これに変更した後:

<link type="text/css" rel="stylesheet" href="/static/style.css" />

修正されました。もちろん、後で気付きましたが、STATIC_URL の設定を使用する必要がありました。

<link type="text/css" rel="stylesheet" href="{{ STATIC_URL }}style.css" />

これが誰にも役立つことを願っています。

于 2013-06-15T23:12:43.350 に答える
0

私はそれをもう少し見てきましたが、例外は最初のパスが持っていた完全なコンテキストなしでキャッチされていないエラーページを表示しようとしたことが原因であると確信しています。これにより、django-compressorで例外が発生します。[1]

もちろん、解決策はすべてのエラーを処理することです。

[1]静的ページを表示するためにいくつかの非標準コードも実行しています。おそらくこれが干渉し、バグがあまり一般的ではない理由です。

于 2011-12-28T14:39:14.573 に答える