检查列表中的元素是否在Django模板的另一个列表中

时间:2019-04-25 13:15:55

标签: python django

我正在通过列表创建for loop。对于此列表中的每个元素,我想知道此元素是否可能与另一个列表中的4个单词之一相对应。

这是我描述情况的示例:

在我看来:

content = ['**Added**:\n', '* something (toto-544)\n', '\n', '**Changed**:\n', ...]

operations = ['Added', 'Changed', 'Fixed', 'INTERNAL']

从我的HTML文件:

{% for line in content %}
  {% if line in operations %}
    <tr class="table-subtitle">
      <td colspan="12">{{ line }}</td>
    </tr>
  {% else %}
    <tr class="table-value-content">
      <td colspan="12">{{ line }}</td>
    </tr>
  {% endif %}
{% endfor %}

它应该显示与第二个元素不同的第一个line元素(我在两个类之间更改了颜色)。因为line[0]位于operations中,而不是line[1]中。

您是否知道为什么它无法通过我的for loop / if statement工作?

2 个答案:

答案 0 :(得分:2)

对于模板而言,此检查有点复杂,但是您可以使用any()函数在Python代码中轻松实现此检查。 由于字符串较长,因此您可以检查操作是否为in字符串:

any(
    op.lower() in s.lower()
    for op in operations)

测试代码:

content = ['**Added**:\n', '* something (toto-544)\n', '\n', '**Changed**:\n',]
operations = ['Added', 'Changed', 'Fixed', 'INTERNAL']

for s in content:
    print()
    print('s:', repr(s))
    print('s in operations:', s in operations)
    print('custom check:   ', any(op.lower() in s.lower() for op in operations))

结果是:

s: '**Added**:\n'
s in operations: False
custom check:    True

s: '* something (toto-544)\n'
s in operations: False
custom check:    False

s: '\n'
s in operations: False
custom check:    False

s: '**Changed**:\n'
s in operations: False
custom check:    True

答案 1 :(得分:1)

@shourav 'Added''**Added**:\n'并非同一个人。这是我的错误,因为我相信in的工作方式像icontains