我在Jinja中有一个可变范围问题,表格不对齐。我试图将目前使用Cheetah编写的模板转换为Jinja但由于某种原因,这个逻辑块不会转换并获得输出python是一个更大的混乱。
#set $sname = ""
#for $serv in $proc:
#if $serv.id == $v[8]:
<td> $serv.shortname </td>
#set $sname = $serv.shortname
#end if
#end for
#if $sname == "":
<td><span style="color:#ff0000">Server not found</span></td>
#end if
所以上面代码的所需输出循环通过一些对象将id与当前行对象匹配并更新值。然后检查该值是否仍然为空并且不打印任何服务器。
{% set sname = "" %}
{{ v[8] }}
{% for serv in proc %}
{% if serv.id == v[8] %}
<td> {{ serv.shortname }} </td>
{% set sname = serv.shortname %}
{% endif %}
{% endfor %}
{% if sname == "" %}
<td><span style="color:#ff0000">Server not found</span></td>
{% endif %}
这个代码如果它正确地匹配它打印两列的id,因为在循环之外sname仍然设置为“”。我尝试在循环中进行比较,但它打印的内容类似于
找不到服务器| ServerName |未找到服务器
答案 0 :(得分:1)
Jinja中的for
循环有一个else
构造,当没有数据可用时调用该构造。 if
也是一个表达式,可用于过滤列表。所以这应该有效:
{% for serv in proc if serv.id == v[8] %}
<td> {{ serv.shortname }} </td>
{% else %}
<td><span style="color:#ff0000">Server not found</span></td>
{% endfor %}
唯一需要注意的是,如果serv
中有多个proc
的ID与v
中的第9个条目匹配,那么您将获得多个td
} s - 但是如果你只有一个,那么上面的代码就是你要找的。 p>