我正在学习web2py。我读了示例开源代码。在一个应用程序(storpy)中,程序员在模型文件T.lazy
内重复使用db.py
,如下所示:
...
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
为什么程序员首先将T.lazy
设置为False
然后设置为True
?
答案 0 :(得分:5)
默认情况下,T()
是惰性的 - 当你调用它时,它实际上不会进行转换,而是返回一个lazyT对象,直到在视图中序列化后才会对其进行转换。如果设置T.lazy=False
,则会强制立即转换,因此调用T('some string')
将返回实际翻译的字符串而不是lazyT对象。
请注意,从即将发布的版本开始,您无需切换T.lazy
到False
和True
,您就可以执行T('some string', lazy=False)
强制立即翻译一个电话。强制立即翻译的其他方法有str(T('some string'))
或T('some string').xml()
- str()
序列化lazyT对象(.xml()
只调用str()
)。