2016-05-17 40 views
0

我在Jinja遇到一个奇怪的问题,我有一个列表endpoints,其中包含每个endpoint的字典。在每本字典中,都有一个关键字tags,它是一个列表。 tags中的每个项目本身都是一个字典,其中的密钥value给出标签的标签。 endpoint可能有类似的标签。Jinja List Issue

endpoints对象的样本抽象表示可以是:

[ {"tags":[{"value":"car"},{"value":"place"}]} , {"tags":[{"value":"van"},{"value":"place"}]} ] 

我想要的是简单的显示独特的标签在一个div。很简单,保存所有显示标签的列表,并在获得标签时检查它是否已经在列表中,如果不显示并将其添加到列表中。奇怪的是,它不起作用。

的代码是:

{% set tagValues = [] %} 
{% for endpoint in endpoints %} 
     {% for tag in endpoint["tags"]%} 
       {% set tagValue = tag["tag"]["value"] %} 
       {% if tagValue not in tagValues %} 
         {% set tagValues = tagValues + [tagValue] %} 
         <span >{{ tagValue }}</span></a> 
       {% endif %} 
     {% endfor %} 
{% endfor %} 

它不工作,例如,对于上面的enpoints列表中,我得到了以下的输出:

car place van place 

有与代码的任何问题?

回答

1

我建议创建的标签在你查看一个独特的名单之前,您endpoints定期蟒。例如

distinctTags = list(set([tag for endpoint in endpoints for tag in endpoint])) 

和传球,为您的模板

{% for tag in distinctTags %} 
    <span >{{ tagValue }}</span></a> 
{% endfor %} 

这个具有鲜明的标签代码,可再利用和代码是少程序的优势。

1

我的jinja知识是有限的,但通过在输出中添加tagValues,似乎它在外循环的每次迭代后都被重置。我猜这是与范围有关,但不知道。

我的建议是预先处理传递给神社

+0

是的,这是发生了什么,它正在重置标签值 – Noor