このブログはWordPressを使って公開しているのですが、いくつか不満な点があって別ブログエンジンへの変更も視野に入れています。
その検討の中で[Tinkerer](http://www.tinkerer.me)というブログエンジンのことを知りました。TinkererはreStructuredTextで書いた原稿を元に静的HTMLファイルを生成し、それをアップロードする形でブログを公開します。静的HTMLなのでサーバへの負荷は小さくなりますし、何よりreStructuredTextでブログが書けます。今すぐにWordPressから置き換えるつもりはありませんが、今後は移行の候補にしたいと思うくらい素敵なエンジンでした。
しかし、このTinkerer、まったく問題がないわけではありません。Tinkererはカテゴリごと、タグごとのアーカイブページはカテゴリ名やタグ名でファイル名をつけようとするため、日本語のカテゴリ名、タグ名を使うと上手くアーカイブページが生成されません。そこで、スラッグを指定できるように、 site-packages/tinkerer/utils.py に手を入れてみました。
[crayon lang="Python"]
'''
utils
~~~~~
Tinkerer utility functions.
:copyright: Copyright 2011-2013 by Vlad Riscutia and contributors (see
CONTRIBUTORS file)
:license: FreeBSD, see LICENSE file
'''
import datetime
import os
import re
# 追加部分ここから
import sys
from tinkerer import paths
# 追加部分ここまで
def name_from_title(title):
'''
Returns a doc name from a title by replacing all characters which are not
alphanumeric or '_' with '_'.
'''
# 追加部分ここから
sys.path.append(paths.root)
import conf
try:
if title in conf.slug:
return conf.slug[title]
except AttributeError:
pass
# 追加部分ここまで
return re.sub(r"[\W_]", "_", title).lower()
[/crayon]
他プロジェクトでも使えるような純粋なユーティリティクラスから設定ファイルを読むのは気持ち悪いですし、そもそも name_from_title が呼ばれるたびに設定ファイルを読み込むのもどうなんだろうという気もしますが、この10行程度の追加でスラッグに対応することができました。
実際のスラッグの指定は、conf.pyで行ってください。日本語のカテゴリやタグの文字列をキーに、スラッグの文字列を値にした連想配列slugを作成することで、HTML生成時にスラッグをファイル名として利用するようになります。
[crayon lang="Python"]
slug = {
u'埼玉西武ライオンズ': 'lions',
u'クイズマジックアカデミー': 'qma',
u'シスター・プリンセス': 'sispri',
}
[/crayon]
なお、このスラッグはカテゴリ、タグで共用されますので、複数定義したり、分けて定義する必要はありません。