我有一个主题列表:
list1 = [topic1, topic2, topic3, topic4, topic5, topic6]
我想针对此列表检查另一个列表:
list2 = [topic2, topic4, topic6]
类似的东西:
{% if list2.items in list1 %}
其中list2中的每个项目都在list1中检查。如果list2中的所有或任何项目都在列表1中,那么它是真的。我认为这很简单,但我无法找到任何有用的东西。
完整示例:
{% set list1 = [topic2, topic4, topic6] %}
{% for post in posts %}
{% set list2 = [topic1, topic2, topic3, topic4, topic5, topic6] %}
{% for topic in list2 %}
{% if topic in list1 %}
{# output of post list based on conditions #}
{% endif %}
{% endfor %}
{% endfor %}
**我正在使用服务器端访问的cms,因此我只能使用模板语言。
答案 0 :(得分:1)
我不知道任何Jinja2 built-in tests可以做到这一点,但很容易添加自己的。{/ p>
假设您在名为template.j2
的文件中有这样的模板:
Is l1 in l2: {% if l1 is subsetof(l2) %}yes{% else %}no{% endif %}
然后,您可以(在此示例的同一目录中)使用添加此检查的Python脚本:
import jinja2
def subsetof(s1, s2):
return set(s1).issubset(set(s2))
loader = jinja2.FileSystemLoader(".")
env = jinja2.Environment(loader=loader)
env.tests["subsetof"] = subsetof
template = env.get_template("template.j2")
print(template.render(l1=[1, 2], l2=[1, 2, 3]))
请注意,test函数的第一个参数在模板中的is
子句之前传递,而第二个参数在括号内传递。
这应该打印:
Is l1 in l2: yes
了解如何定义自定义测试here
答案 1 :(得分:1)
只需创建自定义过滤器:
def intersect(a, b):
return set(a).intersection(b)
env.filters['intersect'] = intersect
然后将其用作任何其他过滤器:
{% if list1 | intersect(list2) %}
hello
{% else %}
world
{% endif%}
这就是Ansible中完成的方式。