Mustache (pystache) 在列表中命名上下文

问题描述

我正在尝试呈现值列表。在我的实际问题中,每个列表项都有一个 name 属性,还有另一个列表,其中的项也有一个 'name' 属性。我试图避免在我的上下文中重命名嵌套列表项。

我做了一些测试,我发现这很完美:

        template = '''
{{#my_list}}
My list name is: {{my_list.name}}
{{/my_list}}
'''
        
        context = {'my_list' : {'name': 'This is my first item'}}

        renderer = pystache.Renderer(missing_tags='strict')
        s = renderer.render(template,context)
        print(s)

输出是你所期望的:

My list name is: This is my first item

但是,如果 my_list 实际上是一个列表(就像在我的实际问题中一样),这会中断:

        context = {'my_list' : [
                {'name': 'This is my first item'},{'name': 'This is my second item'}
            ]}

我得到一个 pystache.context.KeyNotFoundError: Key 'my_list.name' not found: missing 'name'

我的目标是尝试解决这个问题:

template = '''
{{#my_list}}
{{#sublist}}
{{name}} from {{name}}
{{/sublist}}
{{/my_list}}
'''

context = {'my_list' : [
        {'name': 'list first item','sublist' : [
             {'name': 'sublist first item'},{'name': 'sublist second item'}
          ]},{'name': 'list second item',{'name': 'sublist second item'}
          ]}
    ]}

我想要这个渲染:

sublist first item from list first item
sublist second item from list first item
sublist first item from list second item
sublist second item from list second item

但我得到了这个:

sublist first item from sublist first item
sublist second item from sublist second item
list second item from list second item
list second item from list second item

我认为使用带有命名元素的模板可以解决我的问题:

template = '''
{{#my_list}}
{{#sublist}}
{{sublist.name}} from {{my_list.name}}
{{/sublist}}
{{/my_list}}
'''

Handlebars 有一个 solution,但它不适用于 Mustache。

编辑:

我也试过 Chevron,它不起作用。

编辑 2:

我设法调整了上下文和模板以“使其工作”:

template = '''
{{#my_list}}
{{#my_list_item.sublist}}
{{name}} from {{my_list_item.name}}
{{/my_list_item.sublist}}
{{/my_list}}
'''

context = {'my_list' : [
        { 'my_list_item' : 
            {'name': 'list first item','sublist' : [
                 {'name': 'sublist first item'},{'name': 'sublist second item'}
                 ]
            }
        },{ 'my_list_item' : 
            {'name': 'list second item',{'name': 'sublist second item'}
              ]
            }
        }
    ]}

非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)