a.mako
<%def file="one()">
${ two() }
</%def>
<%def file="two()">
two
</%def>
b.mako
<%inherit file="a.mako" />
<%def file="two()">
overriden two
</%def>
我希望将 b.mako 用作
这样的命名空间<%namespace name="test_namespace" file="b.mako" />
${ one() }
我期待overriden two
,但它仍然是two
答案 0 :(得分:0)
诀窍在self
。
我应该写
<%def file="one()">
${ self.two() }
</%def>
文件部分涵盖了
http://docs.makotemplates.org/en/latest/inheritance.html#but-what-about-defs
在上面,title()def,因为它是def中的def,不是模板导出的命名空间的一部分,也不会成为self的一部分。如果继承的模板确实在顶层定义了自己的标题def,那么它将被调用,但无论如何,上面的“默认标题”根本不存在。