如何在Mako模板中使用字典?


问题内容

每当我将复杂的数据结构传递给Mako时,都很难对其进行迭代。例如,我传递了一个dict的list dict,并且要在Mako中访问它,我必须执行以下操作:

% for item in dict1['dict2']['list']: ... %endfor

我想知道Mako是否有某种机制可以[]用简单的方法替换使用来访问字典元素的用法.

然后我可以将上面的行写为:

% for item in dict1.dict2.list: ... %endfor

哪个更好,不是吗?

谢谢,博达·西多(Boda Cydo)。


问题答案:
class Bunch(dict):
    def __init__(self, d):
        dict.__init__(self, d)
        self.__dict__.update(d)

def to_bunch(d):
    r = {}
    for k, v in d.items():
        if isinstance(v, dict):
            v = to_bunch(v)
        r[k] = v
    return Bunch(r)

将dict1传递给to_bunch函数,然后再传递给Mako模板。不幸的是,Mako没有提供任何挂钩来自动执行此操作。