如何在 Mako 模板中导入本地模块?

use*_*901 3 python import module mako local

假设我们在与 mako 模板相同的目录中有一个本地 python 模块: ./my_template.mako ./my_module/module.py

如何将该模块导入到应该使用 mako-render 从命令行渲染的 Mako 模板中?以下不起作用:

<%! import my_module.module %>
Run Code Online (Sandbox Code Playgroud)

本地路径似乎不是搜索路径的一部分。但是,将每个自定义模块放入全局路径不是一种选择。

Ken*_*ock 6

我的猜测是__init__.py您的 ./my_module 文件夹中缺少my_module 成为包所需的 ./my_module 文件夹。这个文件可以留空,它只需要存在来创建包。

这是一个执行您描述的工作的示例。

目录布局

.
??? example.py
??? my_module
?   ??? __init__.py    <----- You are probably missing this.
?   ??? module.py
??? my_template.mako
Run Code Online (Sandbox Code Playgroud)

文件

例子.py

from mako.template import Template
print Template(filename='my_template.mako').render()
Run Code Online (Sandbox Code Playgroud)

my_template.mako

<%! import my_module.module %>
${my_module.module.foo()}
Run Code Online (Sandbox Code Playgroud)

模块.py

def foo():
    return '42'
Run Code Online (Sandbox Code Playgroud)

__init__.py

# Empty
Run Code Online (Sandbox Code Playgroud)

运行示例

>> python example.py

42
Run Code Online (Sandbox Code Playgroud)