在Jinja列出理解

时间:2016-05-19 15:38:34

标签: python jinja2

我有两个清单:

  1. strainInfo,其中包含名为' replicateID'
  2. 的字典元素
  3. selectedStrainInfo,其中包含名为' replicateID'
  4. 的字典元素

    我正在寻找检查我的每个菌株的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 %}
    

2 个答案:

答案 0 :(得分:5)

List comprehensions are not supported in Jinja

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

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

然后在那里清理。

使用Jinja的safe过滤器来阻止您的数据被HTML转义。

答案 1 :(得分:3)

从v2.7开始,有selectattr

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

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

用法示例:

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

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

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

请参见docs