1. ホーム
  2. python

[解決済み] Jinja2テンプレートでif-elif-else文が正しく描画されない。

2022-03-03 04:38:01

質問

jinja2のテンプレートで、cssを使用して文字色を設定しようとしています。 以下のコードでは、変数に文字列が含まれている場合、出力文字列を特定のフォント色で印刷するように設定したいです。 テンプレートが生成されるたびに、else文のために赤で印刷されますが、出力が一致するはずなのに、最初の2つの条件を見ることはありません。 デフォルトで文字列が赤で印刷されるため、私の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="http://mongit201.be.monster.com/icinga/{{ repo }}">{{ 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 %}

ありがとうございます。

解決方法は?

の値が正しいかどうかをテストしているのです。 変数 errorAlready が存在します。 RepoOutput[RepoName.index(repo)] . もしこれらの変数が存在しない場合は 未定義オブジェクト が使用されます。

あなたの ifelif 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文書全体で一意でなければならない値でなければなりません。

個人的には、ここでclassの値を設定し、重複を少し減らす。

{% 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>