【问题标题】:List comprehensions in JinjaJinja 中的列表推导式
【发布时间】:2016-05-19 15:38:33
【问题描述】:

我有两个列表:

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

我正在检查我的每个菌株的复制 ID 是否在选定菌株的列表中,在 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


    【解决方案1】:

    List comprehensions are not supported in Jinja

    您可以通过 Jinja 将数据传递给 JavaScript 变量,就像这样

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

    然后在那里进行清理。

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

    【讨论】:

      【解决方案2】:

      从 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 2018-10-07
        • 2020-04-07
        • 2012-05-04
        • 2012-04-21
        • 2016-02-13
        • 2018-10-30
        相关资源
        最近更新 更多