Как использовать dicts в шаблонах Мако?

Всякий раз, когда я передаю сложную структуру данных Мако, трудно ее повторить. Например, я передаю диктовку списка dict, и для доступа к нему в Mako мне нужно сделать что-то вроде:

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

Мне интересно, есть ли у Мако какой-то механизм, который мог бы заменить использование [] для доступа к элементам словаря с простым .?

Тогда я мог бы написать строку выше:

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

Что гораздо приятнее, не правда ли?

Спасибо, Бода Сидо.

Ответ 1

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 не предоставляет никаких крючков, чтобы сделать это автоматически.