stdvars: グローバルテンプレート変数

TurboGears?はテンプレートを書く人のために、すべてのテンプレートに対して標準の変数セットを用意しています。あなたはこの変数セットに自分で書いた関数や変数を簡単に追加することができます。詳しくは以下をチェックしてください。

TurboGears?が用意しているもの

標準の変数

tg.useragent
ブラウザに関する情報を含んだUserAgentオブジェクト。このオブジェクトは現在、 browser 属性を通してブラウザのタイプ(msie、firefox、safariなど)情報を提供している。safariに関しては、 majorVersionminorVersion も提供する
tg.tg_js
TurboGears?が提供するJavaScriptのライブラリへのウェブパス
tg.locale
現在のロケール。例えば en_US
tg.inputs
cherrypy.request.input_values へのショートカット
tg.errors
cherrypy.request.validation_errors へのショートカット
tg.identity
turbogears.identity.current へのショートカットであり、現在サーブしているユーザへのアクセスを提供する。詳しくは identity ドキュメントを参照

標準の関数

tg.selector(expression)
expression を引数としてとり、 expression がTrueのとき "selected" を返し、それ以外の場合は None を返す
tg.checker(expression)
expression を引数としてとり、 expression がTrueのとき "checked" を返し、それ以外の場合は None を返す
tg.ipeek(iterator)
渡されたイテレータの最初のアイテムを返すが、イテレータをすべて読み込むことはしない。イテレータが空の時は None を返す。これはイテレータが実際に何かを含んでいるかどうかを確かめるのに便利である。データが無いような場合にリストやテーブルを表示しないという選択をするときに有用である
tg.cycle(iterator)

イテレータをとり、終わりまでループする。 itertools.cycle() メソッドと非常によく似ているが、イテレータの現在の値を value 属性を通してえることができる:

>>> from turbogears.view.base import cycle
>>> oe = cycle(('odd','even'))
>>> oe
None
>>> oe.next()
'odd'
>>> oe
'odd'
>>> oe.next()
'even'
>>> oe.next()
'odd'
>>> oe.value
'odd'
tg.quote_plus(string [,safe]?)

標準の urllib.quote_plus() 関数へのショートカット

"%xx" エスケープを使って string 内の特別な文字を置換する。文字、数字、 "_.-" といった記号は決して引用されない。またHTMLのフォーム値を引用するのに必要なため、スペースをプラスの記号「+」で置換する。オリジナル文字列中にあるプラスの記号は、それらが safe に含まれていない限りエスケープされる

tg.config(config_key [, default_value]?)
turbogears.config.get() へのショートカット。最初の引数は設定のキー(例えば 'sqlobject.dburi' )であり、2つ目の引数は検索が失敗したときに返される値である

カスタマイズしたものを追加する

自分で属性やメソッドを追加するためには、 turbogears.view.variable_providers に呼び出し可能なものを追加するだけです。この呼び出し可能なものは、上記の変数を含んでいるDictObj( get_attr などを持っておりオブジェクトのように扱うことができる辞書)に渡されます。属性やメソッドをカスタマイズしたら、ただそのDictObjをアップデートしましょう。

## This is in controllers.py outside your Controller classes.
## Alternatively, put this in stdvars.py and "import projectname.stdvars"

import turbogears

def is_dead(animal):
    if animal == "parrot":
        return True
    elseif animal == "cat":
        from random import choice
        return choice([True,False])
    else:
        return False

def add_custom_stdvars(vars):
    return vars.update({"is_dead": is_dead})

turbogears.view.variable_providers.append(add_custom_stdvars)

## is_dead will now be accessable as tg.is_dead in your templates