【问题标题】:Create a simple python object and send it back to Mako.template.render()创建一个简单的 python 对象并将其发送回 Mako.template.render()
【发布时间】:2012-04-20 03:33:42
【问题描述】:

我正在使用 Mako 为网络路由器创建一些配置模板。

我想创建一个简单的路由器对象,即

文件 routers.py

class myRouter(Object):

     def name(self):
          return "Foo"

     def interfaces(self):
          return [{'name':'loopback','address':'127.0.0.1'},{...}]

然后使用 Mako 和我的模板渲染它

执行:

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>>

如何避免这种行为?

谢谢!

【问题讨论】:

  • 它对我有用。我唯一改变的是myRouter的基类:我使用object而不是Object

标签: python mako


【解决方案1】:

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

您的代码应如下所示:

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

【讨论】:

  • 我已经尝试过了,但是我得到了相同的输出,但十六进制地址不同
猜你喜欢
  • 2017-03-09
  • 1970-01-01
  • 2012-12-15
  • 2014-06-02
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多