Я хотел бы использовать вложенные словари в Усы , раздел Не ложные значения в Руководство по усам предполагает, что это возможно, и представляет следующий пример:
Шаблон:
{{#person?}}
Hi {{name}}!
{{/person?}}
Hash:
{
"person?": { "name": "Jon" }
}
Выход:
Hi Jon!
Я попытался запустить приведенный выше пример в демоверсии и получил:
Hi !
Я также пробовал фисташку (фисташку 0.3.1, Python 2.7.2):
import pystache
tmpl = """
{{#person}}
Hi {{name}}!
{{/person}}
"""
dct = {
"person": { "name": "Jon" }
}
print(pystache.render(tmpl, dct))
И я получил ошибку:
Traceback (most recent call last):
File "test2.py", line 13, in <module>
print(pystache.render(tmpl, dct))
File "c:\Python27\lib\site-packages\pystache\__init__.py", line 7, in render
return Template(template, context).render()
File "c:\Python27\lib\site-packages\pystache\template.py", line 42, in render
template = self.render_sections(template, context)
File "c:\Python27\lib\site-packages\pystache\template.py", line 78, in render_sections
insides.append(self.render(inner, item))
File "c:\Python27\lib\site-packages\pystache\template.py", line 43, in render
result = self.render_tags(template, context)
File "c:\Python27\lib\site-packages\pystache\template.py", line 97, in render_tags
replacement = func(self, tag_name, context)
File "c:\Python27\lib\site-packages\pystache\template.py", line 105, in render_tag
raw = context.get(tag_name, '')
AttributeError: 'str' object has no attribute 'get'
У меня не было проблем со списками, поэтому структура, подобная приведенной ниже, работала нормально:
{
"person?": [{ "name": "Jon" }]
}
Я могу обойтись путем предварительной обработки ввода input (сглаживание или изменение словарей в списки), но почему это не работает? Я что-то не так делаю?
Решение проблемы с фисташками
Версия pystache, расположенная в PyPI , действительно старая (с мая 2010 г.), и в этом проблема. Версия от GitHub намного новее (и проблема с вложенными словарями не проявляется).