在for循环中未正确设置Jinja变量

2024-05-31 23:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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与当前行对象相匹配并更新值。然后检查该值是否仍然为空,并打印“找不到服务器”。在

不工作的Jinja代码

^{pr2}$

相反,如果代码与id正确匹配,则会打印两列,因为在循环之外,sname仍设置为“”。我试着在循环内部进行比较,但结果显示了

找不到服务器|服务器名称|找不到服务器


Tags: 对象代码服务器idforifjinjatd
1条回答
网友
1楼 · 发布于 2024-05-31 23:25:22

Jinja中的^{}循环有一个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 %}

唯一需要注意的是,如果在proc中有多个serv,并且ID与v中的第9个条目相匹配,那么您将得到多个{}s,但是如果您只会有一个,那么上面的代码就是您要寻找的。在

相关问题 更多 >