Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Mako模板中使用dicts?_Python_Templates_Mako - Fatal编程技术网

Python 如何在Mako模板中使用dicts?

Python 如何在Mako模板中使用dicts?,python,templates,mako,Python,Templates,Mako,每当我将一个复杂的数据结构传递给Mako时,就很难对其进行迭代。例如,我传递了一个dict of list,要在Mako中访问它,我必须执行以下操作: dict1['dict2']['list']中项目的%:…%endfor 我想知道Mako是否有某种机制可以取代[]使用简单的访问字典元素 然后我可以把上面的一行写成: dict1.dict2.list中项目的%:…%endfor 哪个更好,不是吗 谢谢,波达·西多 class Bunch(dict): def __init__(self

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

dict1['dict2']['list']中项目的
%:…%endfor

我想知道Mako是否有某种机制可以取代
[]
使用简单的
访问字典元素

然后我可以把上面的一行写成:

dict1.dict2.list中项目的
%:…%endfor

哪个更好,不是吗

谢谢,波达·西多

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传递给Mako模板之前,先将其传递给
传递给\u bunch
函数。不幸的是,Mako没有提供任何自动执行此操作的挂钩。

简化Łukasz'示例:

class Bunch:
    def __init__(self, d):
        for k, v in d.items():
            if isinstance(v, dict):
                v = Bunch(v)
            self.__dict__[k] = v

print Bunch({'a':1, 'b':{'foo':2}}).b.foo

另请参见:

谢谢你Łukasz,这是一个极好的回答,我理解了一切。谢谢你,杰西。我已经在看文件了!:)(我在另一个帖子上问了一个类似的问题,有人建议了。帖子在这里,也许你也感兴趣:)