Frage

Jedes Mal, wenn ich eine komplizierte Datenstruktur zu Mako passieren, ist es schwer, es zu wiederholen. Zum Beispiel gebe ich ein dict von dict der Liste, und den Zugriff auf sie in Mako, ich habe zu tun, so etwas wie:

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

Ich frage mich, wenn Mako einen Mechanismus hat, der [] Nutzung Zugriff Wörterbuch Elemente mit einfachen . ersetzen könnte?

Dann könnte ich die Linie wie oben schreiben:

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

Welche viel schöner ist, ist es nicht?

Danke, Boda cyclo.

War es hilfreich?

Lösung

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)

Pass dict1 zu to_bunch Funktion, bevor es zu Mako-Vorlage übergeben. Leider hat Mako keine Haken bietet dies automatisch zu tun.

Andere Tipps

Die Vereinfachung von Łukasz‘Beispiel:

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

Siehe auch:

scroll top