2013-12-19 3 views
0

Учитывая простой шаблон, я пытаюсь добавить некоторый i18n. Но я получаю следующую ошибку:Tornado locale.translate

File "login_xhtml.generated.py", line 5, in _tt_execute 
    _tt_tmp = _('Welcome') # login.xhtml:4 
UnboundLocalError: local variable '_' referenced before assignment 
(<class 'UnboundLocalError'>, UnboundLocalError("local variable '_' referenced before assignment",), <traceback object at 0x7ffc50c957a0>) 

По какой-то причине «_» не задано в генераторе шаблонов. Хуже того, он становится неопределенным где-то в этом процессе. Я попытался добавить «_» в пространство имен моего обработчика. Я пробовал печатать пространство имен шаблонов из кода торнадо прямо перед вызовом «execute» для вызова шаблона - «_» присутствует в пространстве имен, но не в шаблоне.

Если я определяю что-то еще как псевдоним для «locale.translate», он работает должным образом. Кажется, что проблема связана только с «_».

Моей последняя (довольно отчаянная) попытка была добавить следующую строку в смерч шаблона кода:

def generate(self, writer): 
    writer.write_line("def _tt_execute():", self.line) 
    with writer.indent(): 
+  writer.write_line("_ = locale.translate", self.line) 
     writer.write_line("_tt_buffer = []", self.line) 
     writer.write_line("_tt_append = _tt_buffer.append", self.line) 
     self.body.generate(writer) 
     writer.write_line("return _tt_utf8('').join(_tt_buffer)", self.line) 

И что сделало работу на самом деле. Однако это не кажется правильным решением.

У меня есть последняя версия торнадо (не менее pip говорит так) - 3.1.1.

Что может быть причиной этого?

Примечание: Я использую python3. Может ли это быть причиной проблемы?

+0

Python3, Tornado 3.1.1 отлично подходит для меня. –

+0

Я подозреваю, что проблема в другом месте в моей настройке. Но у меня нет идей, куда искать. – aragaer

ответ

1

UnboundLocalError означает, что _ присваивается дополнительно в коде в той же локальной области (функция как правило), иначе вы бы получили NameError: global name '_' is not defined. Вы должны удалить любые привязки для _ в своем коде. Интерактивная оболочка связывается _, петлевые связки for _ in range(n) и т. Д.

+0

Вот и все! '{% for var, _ in array_of_tuples%}' нарушает '_'. – aragaer

Смежные вопросы