2017-06-22 16 views
0

ウェブページ(HTMLファイル)に表示するオブジェクトのリストがあります。 オブジェクトの種類(グラフ、表など)は状況とは異なります。jinja2テンプレートで変数が変更されていることを確認する方法はありますか?

グラフオブジェクトがある場合は、グラフについてjsとcssファイルを読み込む必要があります。

リストにグラフオブジェクトがない場合、js、cssファイルをグラフにロードしたくないので、 次のjinja2テンプレートHTMLファイルを実装しました。

{% block body %} 
    {% set has_graph = 0 %} 
    {% for item in components %} 
     {% if item.form == 'graph' %} 
      {% set has_graph = 1 %} 
     {% endif %} 
    {% endfor %} 
    {% if has_graph == 1 %} 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js"></script> 
    {% endif %} 
{% endblock %} 

{%set has_graph = 1%}が動作していますが、jsファイルがロードされていません。

{%if has_graph == 1%}が動作しない理由はわかりません。

答えて

0

set文の範囲がjinja2文書(http://jinja.pocoo.org/docs/2.9/templates/#id12)のループを超えることができないことがわかりました。

ブロック内に変数を設定して、ブロックの外側に変数を表示することはできません。これはループにも当てはまります。そのルールの唯一の例外は、スコープを導入しないif文です。その結果、以下のテンプレートは、あなたが期待するかもしれない何をするつもりはない。

{% set iterated = false %} 
    {% for item in seq %} 
     {{ item }} 
     {% set iterated = true %} 
    {% endfor %} 
{% if not iterated %} did not iterate {% endif %} 

それは、これを行うには神社の構文では不可能です。

+0

あなたはインポートやhttps://stackoverflow.com/a/16746185/533426でこれを行うことができますが、ジンジャーは少しひどく書かれているようです – Toskan

関連する問題