Шаблон Jinja2 не выполняет корректную инструкцию if-elif-else
Я пытаюсь установить цвет текста с помощью css в шаблоне jinja2. В следующем коде я хочу установить выходную строку для печати в определенном цвете шрифта, если переменная содержит строку. Каждый раз, когда шаблон генерируется, хотя он печатает красным цветом из-за инструкции else, он никогда не видит первые два условия, даже если вывод должен быть сопоставлен, я могу сказать, какой результат из переменной возникает, когда таблица генерируется, и она как и ожидалось, Я знаю, что мой css корректен из-за печати строки по красному по умолчанию.
Моя первая мысль заключалась в том, чтобы заключить строку, которую я проверял в кавычках, но это не сработало. Далее было то, что jinja не расширялся RepoOutput[RepoName.index(repo)]
, но цикл for выше этого работает, RepoName
расширяется правильно. Я знаю, что если я добавлю фигурные скобки, он напечатает переменную, которая, я уверен, либо сломает шаблон, либо просто не сработает.
Я попытался взглянуть на эти сайты и также просмотрел список глобальных выражений, но не смог найти никаких примеров, похожих на мои или направления, в которых нужно смотреть дальше.
http://jinja.pocoo.org/docs/templates/#if
http://wsgiarea.pocoo.org/jinja/docs/conditions.html
{% for repo in RepoName %}
<tr>
<td> <a href="#" onclick="location.href='http://mongit201.be.monster.com/icinga/{{ repo }}'; return false;">{{ repo }}</a> </td>
{% if error in RepoOutput[RepoName.index(repo)] %}
<td id=error> {{ RepoOutput[RepoName.index(repo)] }} </td> <!-- I want this in green if it is up-to-date, otherwise I want it in red -->
{% elif Already in RepoOutput[RepoName.index(repo) %}
<td id=good> {{ RepoOutput[RepoName.index(repo)] }} </td> <!-- I want this in green if it is up-to-date, otherwise I want it in red -->
{% else %}
<td id=error> {{ RepoOutput[RepoName.index(repo)] }} </td> <!-- I want this in green if it is up-to-date, otherwise I want it in red -->
</tr>
{% endif %}
{% endfor %}
Спасибо
Ответы
Ответ 1
Вы проверяете, имеются ли значения переменных error
и Already
в RepoOutput[RepoName.index(repo)]
. Если эти переменные не существуют, то используется undefined object.
Оба ваших теста if
и elif
поэтому являются ложными; не существует объекта undefined в значении RepoOutput [RepoName.index(repo)].
Я думаю, вам нужно было проверить, есть ли в строке значения следующие значения:
{% if "error" in RepoOutput[RepoName.index(repo)] %}
<td id="error"> {{ RepoOutput[RepoName.index(repo)] }} </td>
{% elif "Already" in RepoOutput[RepoName.index(repo) %}
<td id="good"> {{ RepoOutput[RepoName.index(repo)] }} </td>
{% else %}
<td id="error"> {{ RepoOutput[RepoName.index(repo)] }} </td>
{% endif %}
</tr>
Другие исправления, которые я сделал:
- Используется
{% elif ... %}
вместо {$ elif ... %}
.
- переместил тег
</tr>
из условной структуры if
, он должен быть всегда.
- помещает кавычки вокруг атрибута
id
Обратите внимание, что скорее всего вы хотите использовать здесь атрибут class
, а не id
, последний должен иметь значение, которое должно быть уникальным в вашем документе HTML.
Лично я бы установил значение класса здесь и немного уменьшил дублирование:
{% if "Already" in RepoOutput[RepoName.index(repo)] %}
{% set row_class = "good" %}
{% else %}
{% set row_class = "error" %}
{% endif %}
<td class="{{ row_class }}"> {{ RepoOutput[RepoName.index(repo)] }} </td>