2

通常,在 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从导入模板中访问。这样做的最佳做法是什么?

4

2 回答 2

4

我遇到了同样的问题 - 答案在关于继承的文档中:

命名空间对象的 attr 访问器允许访问在模板中声明的模块级变量。通过访问 self.attr,您可以访问继承链中的常规属性,如 <%! %> 部分。

因此你想base.attr.somevar我想。

于 2011-12-06T11:12:14.040 回答
2

正如上面用户 9000 所建议的那样,我想出了一种方法来做到这一点。我正在发布它,以便记录它以防其他人需要它,但我仍然希望具有更多专业知识的人能够以更好的方式参与进来。

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

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

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

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

于 2011-07-15T01:15:00.967 回答