【问题标题】:Jinja List IssueJinja列表问题
【发布时间】:2016-05-17 12:08:12
【问题描述】:

我在 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

代码有问题吗?

【问题讨论】:

    标签: python dictionary jinja2


    【解决方案1】:

    我建议在您的视图中创建一个不同的标签列表。例如

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

    并将其传递给您的模板

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

    这具有可重复使用的独特标签代码和代码较少程序性的优点。

    【讨论】:

      【解决方案2】:

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

      我的建议是在传递给 jinja 之前在常规 python 中预处理您的endpoints

      【讨论】:

      • 是的,就是这样,正在重置标签值
      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2021-11-25
      • 2018-10-21
      • 2015-07-15
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多