【问题标题】:How do I import a local module in a Mako template?如何在 Mako 模板中导入本地模块?
【发布时间】:2015-02-11 16:36:52
【问题描述】:
假设我们在与 mako 模板相同的目录中有一个本地 python 模块:./my_template.mako ./my_module/module.py
如何将该模块导入应该使用 mako-render 从命令行渲染的 Mako 模板?以下方法不起作用:
<%! import my_module.module %>
似乎本地路径不是搜索路径的一部分。但是,将每个自定义模块放入全局路径不是一种选择。
【问题讨论】:
标签:
python
import
module
local
mako
【解决方案1】:
我的猜测是您的 ./my_module 文件夹中缺少 __init__.py ,这是 my_module 成为软件包所必需的。这个文件可以留空,它只需要存在就可以创建包。
这是一个按照您描述的工作示例。
目录布局
.
├── example.py
├── my_module
│ ├── __init__.py <----- You are probably missing this.
│ └── module.py
└── my_template.mako
文件
example.py
from mako.template import Template
print Template(filename='my_template.mako').render()
my_template.mako
<%! import my_module.module %>
${my_module.module.foo()}
模块.py
def foo():
return '42'
__init__.py
# Empty
运行示例
>> python example.py
42
【解决方案2】:
mako-render 位于 /usr/local/bin 或类似的路径中。
它是一个 python 脚本并遵循 python 解释器的规则来查找导入模块:
1.它的目录(/usr/local/bin)
2. PYTHONPATH 环境变量
3. 在安装库中。
你可以这样做:
$ env PYTHONPATH=. mako渲染