Wie dicts in Mako-Vorlagen verwenden?
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.
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: