创建一个简单的python对象并将其发送回Mako.template.render()

时间:2012-04-06 14:19:04

标签: python mako

我正在使用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!

1 个答案:

答案 0 :(得分:2)

您需要创建类myRouter的实例,然后将其传递给render方法,目前您正在将类本身作为参数传递。

您的代码应如下所示:

r = myRouter()
t.render(router =r)