2011-11-10 6 views
3

私はweb2pyを勉強しています。私はオープンソースのサンプルコードを読んでいます。 1つのアプリケーション(storpy)では、プログラマは、モデル内で繰り返しT.lazy使用していますこのようなdb.pyファイル:T.lazyはweb2pyで何をしますか?

... 
Field('comment', 'text'), 
Field('cover', 'upload', autodelete=True)) 

T.lazy = False 
db.dvds.title.requires = [IS_NOT_EMPTY(error_message=T('Missing data') + '!'), IS_NOT_IN_DB(db, 'dvds.title', error_message=T('Already in the database') + '!')] 
... 
T.lazy = True 

プログラマがTrueに、その後Falseへの最初のT.lazyを設定しないのはなぜ?

答えて

4

デフォルトでは、T()はレイジーです。これを呼び出すと、実際には変換が行われず、代わりにlazyTオブジェクトが返されます。このオブジェクトはビューで直列化されるまで翻訳されません。 T.lazy=Falseを設定すると、即座に変換が強制されるため、T('some string')を呼び出すと、lazyTオブジェクトの代わりに実際に変換された文字列が返されます。

注意、今後のリリースで始まる、代わりにFalseTrueT.lazyをトグルするのでは、単一の呼び出しのための即時翻訳を強制的にT('some string', lazy=False)を行うことができるようになります。直ちに変換を強制する他の方法は、str(T('some string'))またはT('some string').xml() - str()はlazyTオブジェクトをシリアル化します(そして、.xml()は単にstr()を呼び出します)。

+0

明確な説明をいただきありがとうございます。もう1つ質問:即時翻訳が必要なのはなぜですか? –

+2

たとえば、 '%Y /%m /%d 'のような日付形式は変換されますが、' date.strftime(T('%Y /%m /%d '、lazy = False)) '。 – Anthony

関連する問題