通常,在Mako中“导入”命名空间似乎只允许访问defs。
## 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
。这样做的最佳做法是什么?
答案 0 :(得分:2)
正如用户9000建议的那样,我想出了一种方法。我发布它是为了记录以防其他人需要它,但我仍然希望有更多专业知识的人可以用更好的方式进行编写。
据我所知,您无法通过命名空间访问模块块中定义的函数,但您可以访问<%def>
。默认情况下,<%def>
会直接转储到上下文缓冲区,因此您必须进行一些扭曲:
## base.mako
<%!
somevar = ["one", "two", "three"]
%>
<%def name="getSomeVar()">
<%
return somevar
%>
</%def>
然后从另一个模板导入base.mako名称空间为base
并访问${base.getSomeVar()}
以获取somevar
的值。