Переменная Jinja неправильно установлена ​​в цикле for - PullRequest
1 голос
/ 24 февраля 2012

У меня проблема с переменной областью в Jinja, которая не выравнивает таблицу.Я пытаюсь преобразовать текущий шаблон, который написан на Гепарде, в Джинджу, но по какой-то причине этот блок логики не переводит, и на выходе выводит питон еще больше.

Оригинальный код гепарда

#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

Таким образом, желаемым результатом вышеприведенного кода является циклический перебор некоторых объектов, сопоставление идентификаторов с текущим объектом строки и обновление значения.затем проверьте, является ли значение все еще нулевым, и напечатайте сервер, вместо этого найденный.

Код 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 %} 

Этот код вместо этого, если он правильно совпадает с идентификаторами, он печатает оба столбца, поскольку внецикла имя sname по-прежнему установлено на "".Я попытался сделать сравнение внутри цикла, но он напечатал что-то вроде

Сервер не найден |Имя_сервера |Сервер не найден

1 Ответ

1 голос
/ 25 февраля 2012

Цикл 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 %}

Единственное, что нужно отметить, это то, что если в proc имеется более одного serv с идентификатором, совпадающим с 9-й записью в v, то вы получите несколько td с, но если когда-нибудь, тогда приведенный выше код - это то, что вы ищете.

...