Pelicanにjinja2のカスタムフィルタを設定する

Pelicanにカスタムフィルタを設定しました。

このBlogはGitBucketのWikiを使用して記述した記事を、Pelicanという静的サイトジェネレータでBlogに変換して公開しています。

元となるWikiではカテゴリ名をファイル名やディレクトリ名に使用するため、すべて英語に統一しているのですが、Blogで公開する時には日本語に変換したいと思いました。

(ADEMとか書かれていても分かりませんからね。日本語だと病名だということ位はわかりますし。)

そこで、英語名のカテゴリから日本語名のカテゴリに変換するjinja2のフィルタを作成してみました。

Custom Filter の使い方はjinja2のドキュメントを参照してください。

設定方法

pelicanconf.py の設定

以下の内容を pelicanconf.py に記述します。

JINJA_FILTERS = ((u'catgory_jp', catgory_jp),)

CATEGORY_NAMES = (
        (u'Hustler', u'ハスラー'),
        (u'Python', u'Python'),
        (u'ADEM', u'急性散在性脳脊髄炎'),
        (u'Pelican', u'Pelican'),
        );

def catgory_jp(category):
    categories = dict(CATEGORY_NAMES)

    result = category
    if( categories.has_key(category.name) ):
        result = categories[category.name]

    return "%s" % (result)

JINJA_FILTERS は Pelicanの設定値です。

def catgory_jp(category): はフィルタ関数です。

CATEGORY_NAMESは英字から日本名への変換テーブルで、今後はこの設定をメンテナンスすることになります。

template の設定

使用している Thema のカテゴリを表示している個所を以下のように書き換えます。

{{ cat|catgory_jp' }}

cat は catgoryオブジェクトが設定された変数です。

categories.html への設定例:

<dl>
{% for cat, null in categories %}
    <li{% if cat == category %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat|catgory_jp' }}</a></li>
{% endfor %}
</dl>

問題

ソートは英語名で行われるため、カテゴリ一覧の順序性がなくなります。
ソートフィルタが作れれば対応できるのですが…

blogroll