访问Mako名称空间中定义的变量

时间:2011-07-14 16:45:14

标签: python mako

通常,在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

在我的用例somevarfoo相关。我也可以方便地从导入模板中访问somevar。这样做的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

正如用户9000建议的那样,我想出了一种方法。我发布它是为了记录以防其他人需要它,但我仍然希望有更多专业知识的人可以用更好的方式进行编写。

据我所知,您无法通过命名空间访问模块块中定义的函数,但您可以访问<%def>。默认情况下,<%def>会直接转储到上下文缓冲区,因此您必须进行一些扭曲:

## base.mako
<%!
  somevar = ["one", "two", "three"]
%>

<%def name="getSomeVar()">
  <%
    return somevar
  %>
</%def>

然后从另一个模板导入base.mako名称空间为base并访问${base.getSomeVar()}以获取somevar的值。