Django : templatetags の簡単な実装

social というアプリケーションに以下のファイルを用意する。

(rpx)hdknr@deblen2010:~/.ve/rpx/src/myrpx$ tree social/
social/
|-- __init__.py
|-- models.py
|-- templates
|   `-- social
|       `-- login_link.html
|-- templatetags
|   |-- __init__.py
|   `-- social_tags.py
|-- tests.py
|-- urls.py
`-- views.py

 

settings.pyにsocialアプリケーションが追加されていることを確認

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'django_rpx',
    'social',
)

social/templatetags/social_tags.py

import settings
from django import template
from django.template import Context, loader
from django.template.loader import render_to_string
from django.core.urlresolvers import reverse
from django.contrib.sites.models import Site

#
register = template.Library()

@register.inclusion_tag('social/login_link.html', takes_context=True)
def login_link(context, text):
    current_site=Site.objects.get_current()

    return {
      'text': text,
      'realm': 'hdknr.com',
      'token_url': "http://%s" % (current_site.domain,),
    }

social/templates/social/login_link.html

<a class="social_link" onclick="return false;"
   href="https://{{ realm }}.hdknr.com/openid/v2/signin?token_url={{ token_url }}">
   {{ text }}
</a>

social/views.py

rom django import template
from django.http import HttpResponse

def default(request):
    ctx={}
    return HttpResponse(
                template.Template("""
                        {% load social_tags %}
                        <html><head><title>Social</title></head>
                        <body>
                        <h1> Hello Social </h1>
                        {% login_link "LOGIN" %}
                        """
                        ).render( template.Context() ))

つまり、social_tags.py を テンプレートの中で、{% load social_tags %} すると、ライブラリが読み込まれるので、 {% login_link “LOGIN” %} すると、ライブラリの、login_ling(“LOGIN”) が呼ばれます。

実行

WS000013

 

ソース表示。

                        <html><head><title>Social</title></head>
                        <body>
                        <h1> Hello Social </h1>
                        <a class="social_link" onclick="return false;"
   href="https://hdknr.hdknr.com/openid/v2/signin?token_url=http://ec.deb">
   LOGIN
</a>

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中