Python pystache:在lambda中呈现上下文
这是非常相似的,但在提到的帖子中没有真正回答 我的目标:打印以下行:Python pystache:在lambda中呈现上下文,python,mustache,Python,Mustache,这是非常相似的,但在提到的帖子中没有真正回答 我的目标:打印以下行: Al,John,Jack Tim,Tom,Todd 没有最后一个逗号 我试着这样做: ctx = { 'gangs': [ {'gangsters': [ {'name': 'Al' }, {'name': 'John'}, {'name': 'Jack'}]}, {'gangsters': [ {'name': 'Tim'}, {'name': 'Tom'} , {'name': '
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
ContextStack({'gangs':[{'gangsters':[{'name':'Al'},{'name':'John'},{'name':'Jack'},{'gangsters':[{'name':'Tim'},{'name':'Tom'},{'name':'Todd'}]},{'gangsters':[{'name':'Al'},{'name':'John'},{'name':'Jack})
ContextStack({'gangs':[{'gangsters':[{'name':'Al'},{'name':'John'},{'name':'Jack'}},{'gangsters':[{'name':'Tim'},{'name':'Tom'},{'name':'Todd'}]},{'gangsters':[{'name':'Al'},{'name':'John'},{'name':'Jack})
艾尔,约翰,杰克
艾尔,约翰,杰克
罪魁祸首是在rstrip中调用render()。注意,在第二次调用期间,ContextStack的3d元素与前一次调用完全相同
这是一只虫子,还是我遗漏了什么 回答上游:
这个问题让我整个上午都把头撞在桌子上XD感谢分享答案;)
def rstrip(self):
"Remove last character"
return lambda s: copy.deepcopy(self.renderer).render(s, self.renderer.context)[:-1]