Что делает T.lazy в web2py? - PullRequest
       24

Что делает T.lazy в web2py?

4 голосов
/ 10 ноября 2011

Я изучаю 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?

1 Ответ

5 голосов
/ 10 ноября 2011

По умолчанию 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()).

...