Как обращаться с вложенным контекстом? - PullRequest
2 голосов
/ 18 января 2012

Я хотел бы использовать вложенные словари в Усы , раздел Не ложные значения в Руководство по усам предполагает, что это возможно, и представляет следующий пример:

Шаблон:

{{#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 намного новее (и проблема с вложенными словарями не проявляется).

1 Ответ

0 голосов
/ 18 января 2012

Если мы не знаем, что происходит с context при:

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, '')

, было бы трудно понять, почему это не удается и почему обходной путь успешен, потому что в итоге context долженбыть dict не str.

Я рекомендую вам отправить эту проблему в pystache.Они серьезно относятся к своим проблемам, глядя на их страницу .

...