Jinja 中的列表推导式

问题描述 投票:0回答:2

我有两个清单:

  1. strainInfo,其中包含一个名为“replicateID”的字典元素
  2. selectedStrainInfo,其中包含一个名为“replicateID”的字典元素

我正在检查我的每个菌株的replicateID是否在选定菌株的列表中,在python中它会是这样的:

for strain in strainInfo:
    if strain.replicateID in [selectedStrain.replicateID for selectedStrain in selectedStrainInfo]
        print('This strain is selected')

我在 django 中获得了正确的功能,但我想知道是否有一种方法可以使用列表理解来简化:

{% for row in strainInfo %}
    {% for selectedStrain in selectedStrainsInfo %}
       {% if row.replicateID == selectedStrain.replicateID %} 
           checked 
       {% endif %}
    {% endfor %}
{% endfor %}
python jinja2
2个回答
21
投票

Jinja 不支持列表推导式

您可以通过 Jinja 将数据传递给 JavaScript 变量,如下所示

var strainInfo = {{strainInfo|safe}};
var selectedStrainInfo = {{selectedStrainInfo|safe}};

然后在那里进行清理。

使用 Jinja 的

safe
过滤器来防止您的数据被 HTML 转义。


21
投票

从 v2.7 开始有

selectattr
:

通过对每个对象的指定属性应用测试来过滤对象序列,并仅选择测试成功的对象。

如果未指定测试,则属性的值将被评估为布尔值。

使用示例:

{{ users|selectattr("is_active") }}
{{ users|selectattr("email", "none") }}

类似于生成器理解,例如:

(user for user in users if user.is_active)
(user for user in users if test_none(user.email))

请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.