访问在Mako命名空间中定义的变量
通常,在Mako中“导入”一个命名空间似乎只允许访问定义的内容。
## base.mako
<%
somevar = ["one", "two", "three"]
%>
<%def name="foo()">Bar</%def>
还有一个导入的模板:
## child.mako
<%namespace name="base" file="base.mako" />
${base.foo()} # works
${base.somevar} # fails: no soup for you
在我的使用场景中,somevar
和foo
是有关系的。我希望能方便地在导入的模板中也访问到somevar
。这样做的最佳方法是什么呢?
2 个回答
2
正如用户9000上面提到的,我找到了一个解决办法。我把这个方法发出来,以便记录下来,万一其他人需要用到。不过我还是希望有更专业的人能提供更好的方法。
据我所知,你不能通过命名空间访问在模块块中定义的函数,但你可以访问一个<%def>
。默认情况下,<%def>
块会直接输出到上下文缓冲区,所以你需要做一些变通:
## base.mako
<%!
somevar = ["one", "two", "three"]
%>
<%def name="getSomeVar()">
<%
return somevar
%>
</%def>
然后在另一个模板中,将base.mako的命名空间导入为base
,并通过${base.getSomeVar()}
来获取somevar
的值。
4
我也遇到过同样的问题,答案在关于继承的文档里:
Namespace对象的attr访问器可以让你访问在模板中声明的模块级变量。通过访问self.attr,你可以从继承链中访问在<%! %>部分声明的常规属性。
所以我觉得你需要用base.attr.somevar
。