PythonのDjangoフレームワークの静的リソースマネージャdjango-pipelineについて説明します
2693 ワード
django-pipelineはDjangoで非常に便利な静的リソース管理appであり、特に1.2バージョン以降、django-staticfilesのcollectstaticコマンドを利用して、開発、導入環境での切り替えが非常に便利である.
書くcomコードの時、静的資源管理の面でいくつかの煩わしいことに遭遇しました.ページのロード速度を速めるため、ブラウザは静的ファイルをキャッシュし、静的リソースが更新すると、ブラウザはキャッシュから期限切れの静的ファイル を抽出する可能性が高い.自分で書いたCSS/JSは手作業でminifyしなければならなくて、とても面倒です こまごましたCSS/JSファイルが多すぎます CSS/JS minified以降、開発環境でデバッグするのは不便です django-pipelineは、静的リソースのバージョン化、自動minify、パケットマージCSS/JSファイル、互換django-staticfiles URLルール、collectstaticコマンドを使用します.slimit/jsmin
図は安心して、私は通常jsmin/cssminのこの2つのPython minifierを使います:
しかし、jsminは長年修理されておらず、実際の使用結論は、jsminにはバグがあり、jQuery開発ライブラリはjsmin minifyで破壊され、根本的に正常に動作しない.ただしjQuery公式minify以降のJSファイルはjsmin minify以降は問題ありません.
回避策はあるものの、あくまでもjsminに不安があり、いっそslimitに変更し、JSが破壊された問題はまだ発見されていない.
django-pipelineはslimitのサポートを提供していませんが、pipelineの拡張性は悪くありません.slimit拡張を書くのも分です.
以上のコードをslimitファイルに保存し、プロジェクト内のパッケージディレクトリの下に捨てればいいので、settingsを変更します.
UnicodeDecodeError:'ascii'codec can't decode byte問題
django-pipelineを有効にするとmanageが実行されます.py collectstatic次のエラーメッセージに遭遇した場合:
8割はCSSファイルに中国語またはその他の非ラテン文字が含まれているためです.@font-faceアイコン文字を使用するときにこの問題に遭遇しました.これはdjango staticfilesパッケージのバグです.解決策は/django/contrib/staticfiles/storageを修正することです.pyファイル、エラーの行コードを:
置換先:
この方法を使用する前提は、CSSファイルがutf-8符号化を保証しなければならないことです.そうしないと、エラーが発生します.
PSは、Djangoプロジェクトにバグレポートを提出しました.https://code.djangoproject.com/ticket/18430
書くcomコードの時、静的資源管理の面でいくつかの煩わしいことに遭遇しました.
図は安心して、私は通常jsmin/cssminのこの2つのPython minifierを使います:
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.jsmin.JSMinCompressor'
PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.cssmin.CssminCompressor'
しかし、jsminは長年修理されておらず、実際の使用結論は、jsminにはバグがあり、jQuery開発ライブラリはjsmin minifyで破壊され、根本的に正常に動作しない.ただしjQuery公式minify以降のJSファイルはjsmin minify以降は問題ありません.
回避策はあるものの、あくまでもjsminに不安があり、いっそslimitに変更し、JSが破壊された問題はまだ発見されていない.
django-pipelineはslimitのサポートを提供していませんが、pipelineの拡張性は悪くありません.slimit拡張を書くのも分です.
from __future__ import absolute_import
from pipeline.compilers import CompilerBase
class SlimItCompiler(CompilerBase):
"""
JS compressor based on the Python library slimit
(http://pypi.python.org/pypi/slimit/).
"""
def compress_js(self, js):
from slimit import minify
return minify(js)
以上のコードをslimitファイルに保存し、プロジェクト内のパッケージディレクトリの下に捨てればいいので、settingsを変更します.
PIPELINE_JS_COMPRESSOR = 'lib.slimit.SlimItCompiler'
UnicodeDecodeError:'ascii'codec can't decode byte問題
django-pipelineを有効にするとmanageが実行されます.py collectstatic次のエラーメッセージに遭遇した場合:
File ".../ENV/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 226, in post_process
content = pattern.sub(converter, content)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
8割はCSSファイルに中国語またはその他の非ラテン文字が含まれているためです.@font-faceアイコン文字を使用するときにこの問題に遭遇しました.これはdjango staticfilesパッケージのバグです.解決策は/django/contrib/staticfiles/storageを修正することです.pyファイル、エラーの行コードを:
content = original_file.read()
置換先:
content = original_file.read().decode('utf-8')
この方法を使用する前提は、CSSファイルがutf-8符号化を保証しなければならないことです.そうしないと、エラーが発生します.
PSは、Djangoプロジェクトにバグレポートを提出しました.https://code.djangoproject.com/ticket/18430