2013-12-19 245 views
0

鑑於一個簡單的模板,我想添加一些國際化。但我收到以下錯誤:龍捲風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。您應該刪除代碼中的任何綁定_。交互式shell綁定_,循環綁定for _ in range(n)

+0

就是這樣! '{%for var,_ in array_of_tuples%}'打破'_'。 – aragaer