Jinja 列表问题
Jinja List Issue
我在 Jinja 遇到了一个奇怪的问题,我有一个列表 endpoints
,其中包含每个 endpoint
的字典。在每个字典中,有一个键 tags
是一个列表。 tags
中的每个项目本身就是一个字典,其中键 value
给出了标签的标签。 endpoint
可能有相似的标签。
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
代码有问题吗?
我的 jinja 知识有限,但是通过将 tagValues
添加到输出中,它似乎在外循环的每次迭代后被重置。我猜这与范围有关,但不知道。
我的建议是在传递给 jinja
之前以常规方式 python 预处理您的 endpoints
我建议在您的视图中创建一个不同的标签列表。例如
distinctTags = list(set([tag for endpoint in endpoints for tag in endpoint]))
并将其传递给您的模板
{% for tag in distinctTags %}
<span >{{ tagValue }}</span></a>
{% endfor %}
这样做的好处是独特的标签代码可以重复使用,而且代码的程序性较低。
我在 Jinja 遇到了一个奇怪的问题,我有一个列表 endpoints
,其中包含每个 endpoint
的字典。在每个字典中,有一个键 tags
是一个列表。 tags
中的每个项目本身就是一个字典,其中键 value
给出了标签的标签。 endpoint
可能有相似的标签。
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
代码有问题吗?
我的 jinja 知识有限,但是通过将 tagValues
添加到输出中,它似乎在外循环的每次迭代后被重置。我猜这与范围有关,但不知道。
我的建议是在传递给 jinja
之前以常规方式 python 预处理您的endpoints
我建议在您的视图中创建一个不同的标签列表。例如
distinctTags = list(set([tag for endpoint in endpoints for tag in endpoint]))
并将其传递给您的模板
{% for tag in distinctTags %}
<span >{{ tagValue }}</span></a>
{% endfor %}
这样做的好处是独特的标签代码可以重复使用,而且代码的程序性较低。