2013-12-17 27 views
1

背景下這是非常相似的https://github.com/defunkt/pystache/issues/157,但在提到後並沒有真正回答...pystache:渲染內部拉姆達

我的目標:打印以下行:

Al,John,Jack 
Tim,Tom,Todd 

最後一個逗號。

我試着這樣說:

ctx = { 
    'gangs': [ 
     {'gangsters': [ {'name': 'Al' }, {'name': 'John'}, {'name': 'Jack'}]}, 
     {'gangsters': [ {'name': 'Tim'}, {'name': 'Tom'} , {'name': 'Todd'}]}, 
    ] 
} 


class Lambdas(object): 
    def __init__(self, renderer): 
     self.renderer = renderer 

    def rstrip(self): 
     "Remove last character" 
     print self.renderer.context 
     return lambda s: self.renderer.render(s, self.renderer.context)[:-1] 

renderer = pystache.Renderer(missing_tags='strict') 

print renderer.render(""" 
    {{#gangs}} 
     {{#rstrip}}{{#gangsters}}{{name}},{{/gangsters}}{{/rstrip}} 
    {{/gangs}} 
""", ctx, Lambdas(renderer)) 

輸出:

ContextStack({'gangs': [{'gangsters': [{'name': 'Al'}, {'name': 'John'}, {'name': 'Jack'}]}, {'gangsters': [{'name': 'Tim'}, {'name': 'Tom'}, {'name': 'Todd'}]}]}, <__main__.Lambdas object at 0x15cadb10>, {'gangsters': [{'name': 'Al'}, {'name': 'John'}, {'name': 'Jack'}]}) 
ContextStack({'gangs': [{'gangsters': [{'name': 'Al'}, {'name': 'John'}, {'name': 'Jack'}]}, {'gangsters': [{'name': 'Tim'}, {'name': 'Tom'}, {'name': 'Todd'}]}]}, <__main__.Lambdas object at 0x15cadb10>, {'gangsters': [{'name': 'Al'}, {'name': 'John'}, {'name': 'Jack'}]}) 

Al,John,Jack 
Al,John,Jack 

罪魁禍首是渲染調用()內rstrip。請注意,在第二次調用期間,ContextStack的3D元素與之前的調用完全相同。

這是一個錯誤,還是我錯過了什麼?!?

回答