2012-10-06 46 views
3

我試圖使用mako.imports設置以避免在每一個模板文件導入模塊。金字塔設置mako.imports不工作

本來我有一個模塊級的塊,在每一樣模板頂部:

<%! 
    import logging 
%> 

而且我想,以取代與設置在.ini文件:

mako.imports = 'import logging' 

這不起作用,因爲當我嘗試使用它時,模板只會引發NameError: name 'logging' is not defined

看樣子mako.imports甚至不被調用,因爲像設置:

mako.imports = 'import SpamAndEggs' 

不會引發錯誤。

我使用Pyramid 1.3和Mako 0.7.0。

回答

2

pylons-discuss,語法是:通過換行分隔

mako.imports = 
    import logging 
    import some.other.module 

import語句。我認爲文檔應該用一個例子來說明,因爲Python的「字符串列表」是相當不同的。

感謝Mike Merickel。

1

好了,望着金字塔生成Mako的模板代碼,它只是從字面上輸出什麼是在配置設置,報價,支架和所有。

所以,語法必須是:

mako.imports = import logging

多進口爲:

mako.imports = import logging, some.other.module

任何這些:

mako.imports = 'import logging' 
mako.imports = ['import logging', 'some.other.module'] 
mako.imports = import logging, import some.other.module 

最後拋出一個mako.exceptions.SyntaxException因爲它不是有效的Python,但第2失敗默默,什麼都不做,因爲他們只輸出文字的一行代碼。

我沒有從documentation中得出這個結論,它讀取「Python語句的字符串列表,通常是單個」導入「行」(但也許我只是不明白它的正確含義)。

感謝Mike Bayer在Mako的post