Djangoのコンテクストプロセッサーを使ってみたよ。

Django のコンテクストプロセッサーを使ってみたよ。

サイト名とかドメインとか決まりきったものを、 ビューから渡したりテンプレートタグにしたりするのもどうかなぁ? と思ってた。

スパムとか さんの djblogkit をのぞいてみると、 TEMPLATE_CONTEXT_PROCESSORS に自作のコンテクストプロセッサーを追加して、 テンプレートに変数を渡してる。ので、コレを参考にして(ほぼパクって)やってみる。

# vim: fileencoding=utf-8 :

from django.conf import settings
from django.contrib.sites.models import Site, RequestSite

def site(request):
    """
    サイト名とドメインをテンプレートに落とす。
    """
    # django.contrib.sitesがインストールされてるかチェック。
    if Site._meta.installed:
        current_site = Site.objects.get_current()
    else:
        current_site = RequestSite(request)

    # サイト名の取得。
    if hasattr(settings, 'SITE_NAME'):
        SITE_NAME = settings.SITE_NAME
    elif hasattr(current_site, 'name'):
        SITE_NAME = current_site.name
    else:
        SITE_NAME = u''

    # ドメインの取得。
    if hasattr(settings, 'SITE_DOMAIN'):
        SITE_DOMAIN = settings.SITE_DOMAIN
    elif hasattr(current_site, 'domain'):
        SITE_DOMAIN = current_site.domain
    else:
        SITE_DOMAIN = u''

    return {
        'SITE_NAME'     : SITE_NAME,
        'SITE_DOMAIN'   : SITE_DOMAIN,
    }


def path_info(request):
    """
    PATH_INFOをテンプレートに落とす。
    """
    # request_pathにすべき?
    return {
        'PATH_INFO' : request.path,
    }

コレを context_processors.py とかにして適当な場所に保存。 今回はとりあえず試しなのでプロジェクトディレクトリ直下に保存してみた。 で、組み込む為に settings.py に設定を追記する。

TEMPLATE_CONTEXT_PROCESSORS の項目自体は、デフォルトだと settings.py には無い。 ので、 django.conf.global_settings.py からコピペして持ってくる。

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'myproject.context_processors.site',        # <--- コレを追記
    'myproject.context_processors.path_info',   # <--- コレを追記
#    'django.core.context_processors.request',
)

これでテンプレートに変数として落ちて来てる(ハズ)。 毎回レスポンスにセットする様な変数なんかは、コンテクストプロセッサー使った方が全然楽ちん。 だという事を今更知ったよ。

Posted at: 
2007/09/23 04:52:25
0 Comments
0 TrackBacks
Tags: 
Django
templates
Trackback: 
http://humming.via-kitchen.com/2007/09/23/use-context-processor-on-django/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment