我正在尝试使用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。
答案 0 :(得分:2)
从pylons-discuss开始,语法为:
mako.imports =
import logging
import some.other.module
导入以换行符分隔的语句。我认为文档应该用一个例子说明这一点,因为Python人员的“字符串列表”是相当不同的。
感谢Mike Merickel。
答案 1 :(得分: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,但前两个无声地失败,什么都不做,因为它们只是输出一个文字作为一行代码。
我没有从documentation推断出这是“Python语句的字符串列表,通常是单独的”导入“行”(但也许我只是没有正确理解它)。
感谢Mike Bayer在Mako上的post。