djangoのテンプレートでBootstrapのNavBarみたいなやつのactive状態を操作する

親テンプレートのNavBarのactive状態をどうやって操作しようかと思い、現在のパスで判定をすることにしました。
NavBar:Bootstrap, from Twitter

コンテキストプロセッサー(context processors)

テンプレートにpath(”/music/bands/the_beatles/”のような相対パス)を渡すために、コンテキストプロセッサーを自作します。
(コンテキストプロセッサーにテンプレートに渡すコンテキストをどのように処理するかを記述する)

context_processor.pyのような名前のファイルを作成し、

def path(request):
    return {'path': request.path}

と書いて保存します。

リクエストコンテキストを生成するときに、いちいちコンテキストプロセッサーを指定しても良いのですが、今回の場合はプロジェクト全体で使用するので、settings.pyに以下を追加します

# デフォルトのコンテキストプロセッサー
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.contrib.messages.context_processors.messages"
)
# 追加するコンテキストプロセッサー
TEMPLATE_CONTEXT_PROCESSORS += (
    'project_name.context_processors.path',
)

レンダリング

以下のようにコンテキストを与えた上でレンダリングを行います。

return render_to_response('template.html',
                          {},
                          context_instance=RequestContext(request))

テンプレート

以下のようにpathを判定することでアクティブ状態を切り替えます。

<li{% if path == "/hoge/fuga/" %} class="active"{% endif %}>

本来は

{% if path == {% url someapp.views.hoge %} %}

のように書ければいいのですが、テンプレート構文がネストできないため、ベタ書きをしています。(もし出来るようでしたら、教えていただけると助かります)