这与https://github.com/defunkt/pystache/issues/157非常相似,但是在提到的帖子中并没有真正回答...

我的目标:打印以下行:

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中render()的调用。请注意,在第二个调用期间,ContextStack的3d元素与上一个调用如何完全相同。

这是一个错误,还是我缺少了什么?!

最佳答案

上游回答:https://github.com/defunkt/pystache/issues/158

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

09-13 02:16