4

我正在尝试使用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。

4

2 回答 2

2

pylons-discuss,语法是:

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

用换行符分隔的导入语句。我认为文档应该用一个例子来说明这一点,因为 Python 人的“字符串列表”是相当不同的。

感谢迈克·梅里克。

于 2012-10-08T11:45:35.253 回答
1

好的,所以看看 Pyramid 生成的 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

最后一个抛出 amako.exceptions.SyntaxException因为它不是有效的 Python,但前 2 个无声无息地失败,什么也不做,因为它们只是将文字输出为一行代码。

我没有从阅读“Python 语句的字符串列表,通常是单独的“导入”行”的文档中推断出这一点(但也许我只是没有正确理解它)。

感谢 Mike Bayer在 Mako 上的帖子。

于 2012-10-08T01:06:27.410 回答