django-pipelineの使い方

cssファイルやjsファイルをまとめて圧縮してくれる、django-pipelineの使い方です。ドキュメントで上手くいかなかった部分を少々アレンジしたので、メモを残しておきます。

js、cssファイルを簡単に圧縮できるDjango Compressorの使い方という記事を書きました。これも同じく圧縮のために使うモジュールです。個人的にはDjango Compressorの方が使いやすいと感じました。

django-pipelineの使い方 - 概要

  1. pipコマンドでdjango-pipelineをインストールする。
  2. YUI Compressorをダウンロードする。
  3. YUI Compressorをキックするスクリプトを書き、/usr/local/bin下にシンボリックリンクを作成する。
  4. settings.pyを編集する。
  5. manage.pyの引数に「synccompress」を指定して、圧縮したファイルを作成する。
  6. テンプレートから圧縮したファイルを読み込む

以上になります。

django-pipelineの使い方 - 詳細

yuicompressorのダウンロード

yuicompressorを上記リンク先から取得して解凍します。以下は、「$HOME/libs」下にjarを配置する場合です。また、yuicompressorのバージョンは記事作成時最新の、2.4.7を使っています。

mkdir $HOME/tmp
cd tmp
wget http://yui.zenfs.com/releases/yuicompressor/yuicompressor-2.4.7.zip
unzip yuicompressor-2.4.7.zip
mkdir $HOME/libs
mv yuicompressor-2.4.7/build/yuicompressor-2.4.7.jar $HOME/libs/

pipコマンドでdjango-pipelineをインストール

pipコマンドを使ってdjango-pipelineをインストールします。これに限ったことではありませんが、環境の依存をなくすために、pipを使う時はvirtualenvを使った方がいいと思います。

pip install django-pipeline

yuicompressorをキックするスクリプトの作成

例えば、「$HOME/scripts」下にキックするスクリプトを作成する場合は以下のようにします。

mkdir $HOME/scripts
vi $HOME/scripts/yuicompressor
--- ファイル: $HOME/scripts/yuicompressor ---

#!/bin/sh
java -jar '/path/to/yuicompressor-2.4.7.jar' $@

シンボリックリンクの作成

sudo ln -s $HOME/scripts/yuicompressor /usr/local/bin/

settings.pyの編集

Djangoのsettings.pyに、django-pipelineの記述を追加します。

--- ファイル: settings.py ---

INSTALLED_APPS = (
    ...,
    ...,
    'pipeline',
)

PIPELINE_CSS = { 
    'group1': {
        'source_filenames': (
            'static/css/style1.css',
            'static/css/style2.css',
        ),
        'output_filename': 'static/compressed/group1.css',
    },  
}

PIPELINE_JS = { 
    'group1': {
        'source_filenames': (
            'static/js/group1.js',
            'static/js/group2.js',
        ),  
        'output_filename': 'static/compressed/group1.js',
    },  
}

圧縮ファイルの作成

manage.pyの引数にsynccompressを指定して、settings.pyに記述した通りに圧縮ファイルを作成します。

python manage.py synccompress

ちなみにアレンジしたのは、テンプレートで圧縮ファイルを読み込む際にdjango-pipeline用のタグがうまく動作しなかったので、圧縮したファイルを直接読み込んだだけです。

この記事が役に立った場合、シェアしていただけると励みになります!!