[Python][Flask]ブログエントリーの経過時間を表示させる

ブログを再構築した際に追加した機能のひとつにブログエントリーの経過時間を表示させるってのがあります。

スクリーンショット 2013-05-13 20.27.39

こういうやつです。

これは、IT技術なエントリーを多めに掲載するブログなら、検索された時に経過時間が表示されたほうが良い(情報が古そうかどうかパッと判断できたほうが良い)と考えたからです。

元ネタはここです

ここでは、jinja2のカスタムテンプレートフィルタとして作成し、ツイッターのようなマイクロブログサービスにおけるタイムラインでの相対的な時間経過表示に使用するtipsになっていますが、私はそれをFlaskのflashで使用するようにカスタマイズしました。ついでに日本語ローカライズもしています(日本語は時間単位に複数形が無いのでコードが簡潔になりますね)。


上記コードはutils/timesince.pyなどにしておいて、これをアプリケーション側で以下の様に記述し

from utils.timesince import timesince

@app.route('/entry/<int:post_id>')
def show_entry(post_id):
    dt = Entry.query.filter_by(id = post_id).one()
    flash(u'%s' % timesince(dt.pub_date), 'alert-success')
    return render_template('show_entries.html',
        entries = Entry.query.filter_by(id = post_id).all(), tags=show_tags())

テンプレート側で以下の様に受け取ります

<div class="row">
            <div class="span9">
                {% for category, message in get_flashed_messages(with_categories=true) -%}
                <div class="{{category}}">{{message}}</div>
                {%- endfor %}
                {% block body %}{% endblock %}
            </div>
            <div class="span3">
                <div id="sidebar">
                    {% block sidebar %}{% endblock %}
                </div>
            </div>
        </div>

因みにFlaskのflashにはメッセージとともにカテゴリーを設定することが出来て、それもテンプレート側で受け取ることが出来ますが、私はカテゴリーにtwitter-bootstrapのAlertsで使用されるクラス名をそのまま使用しています。そうすることによってテンプレート側でのクラス名にそのまま利用することが出来るからです。

ここではAlertsのsuccessを使っていているので緑っぽいですが、infoだと青になると思います。

ちょっと色がトロピカルっぽいんでもう少し淡くしようかとも思っています。

  • このエントリーをはてなブックマークに追加
PAGE TOP