我正在使用Mako为网络路由器创建一些配置模板。
我想创建一个简单的路由器对象,即
文件routers.py
class myRouter(Object):
def name(self):
return "Foo"
def interfaces(self):
return [{'name':'loopback','address':'127.0.0.1'},{...}]
然后使用Mako和我的模板
渲染它Exec的:
from mako import *
from routers import myRouter
z = myRouter()
mytemplate = Template(filename='config.mako')
print mytemplate.render(router=z)
文件config.mako
Router name is ${router.name()}!
Router interfaces are :
% for i in router.interfaces():
${i.name} -> ${i.address}
% endfor
输出:
路由器名称是
<bound method Router.name of <pyrouteur.Router object
> at 0x7fa10a912310>>
我该如何避免这种行为?
THKS!
答案 0 :(得分:2)
您需要创建类myRouter
的实例,然后将其传递给render方法,目前您正在将类本身作为参数传递。
您的代码应如下所示:
r = myRouter()
t.render(router =r)