gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:21:52 24 4
gpt4 key购买 nike

我在 Jinja 中遇到变量范围问题,导致表格未对齐。我正在尝试将用 Cheetah 编写的当前模板转换为 Jinja,但由于某种原因,该逻辑 block 无法转换,并且获取 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 与当前行对象匹配的对象并更新值。然后检查该值是否仍然为 null 并打印 no server found。

Jinja 代码不起作用

{% 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 仍设置为“”。我尝试在循环内进行比较,但它打印出类似的内容

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

最佳答案

for 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 %}

唯一需要注意的是,如果有多个servproc其 ID 与 v 中的第 9 个条目匹配那么你会得到多个td s - 但如果您只有一个,那么上面的代码就是您正在寻找的。

关于python - Jinja 变量在 for 循环中未正确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com