我想在Mustache中使用嵌套字典,在Mustache manual中的“非虚假值”部分建议这样做,并给出以下示例:
模板:
{{#person?}}
Hi {{name}}!
{{/person?}}
杂凑:
{
"person?": { "name": "Jon" }
}
输出:
Hi Jon!
我试图在online demo中运行上述示例,但得到了:
Hi !
我也尝试了pystache(pystache 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" }]
}
我可以通过输入dict预处理(将字典拼合或更改为列表)进行变通,但是为什么它不起作用?难道我做错了什么?
难题问题的解决
PyPI中的pystache版本真的很旧(从2010年5月开始),这就是问题所在。 GitHub的版本要新得多(并且不会显示嵌套字典的问题)。
最佳答案
除非我们知道在以下情况下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。他们认真对待自己的问题,看他们的page。