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