2013-12-11 109 views
0

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

訣竅是在self

我應該寫

<%def file="one()"> 
    ${ self.two() } 
</%def> 

這部分是由文件覆蓋的確

http://docs.makotemplates.org/en/latest/inheritance.html#but-what-about-defs

如果上面的標題()閃避,因爲它是一個高清內的高清,是不是模板導出名稱空間的一部分,不會成爲自我的一部分。如果繼承的模板確實在頂層定義了它自己的標題def,它將被調用,但是上面的「默認標題」根本不存在於自己,無論如何。