web-dev-qa-db-ja.com

変数と変数が定義されている場合-jinja2

データベースエントリが作成されたかどうかに応じて、divsを表示しようとしています。

<table class="info-table">
<tr><td>
<div class="info-table_titlebox">
{% if post.wrk_1_title is defined %}
    <div class="info-title_title">
    <h2>{{post.wrk_1_title}}</h2>
    <h3>Facilitator: {{post.wrk_1_facilitator}}</h3>
    <h4>Location: {{post.wrk_1_locate}}</h4>
    <h4>Max participants: {{post.wrk_1_max}}</h4>
    </div>
    <div class="info-title_list">
        <ul>
        <li>{{post.eventday}} - <b>Week {{post.eventweek}}</b></li>
        <li class="info-title_listright">{{post.wrk_1_time}}</li>
        </ul>
    </div>
    <p>{{post.wrk_1_description}}</p>
{% endif %}
</div>
</td>
<td>
<div class="info-table_titlebox">
{% if post.wrk_1_title is defined and post.wrk_2_title is defined %} 
    <div class="info-title_title">
    <h2>{{post.wrk_2_title}}</h2>
    <h3>Facilitator: {{post.wrk_2_facilitator}}</h3>
    <h4>Location: {{post.wrk_2_locate}}</h4>
    <h4>Max participants: {{post.wrk_2_max}}</h4>
    </div>
    <div class="info-title_list">
        <ul>
        <li>{{post.eventday}} - <b>Week {{post.eventweek}}</b></li>
        <li class="info-title_listright">{{post.wrk_2_time}}</li>
        </ul>
    </div>
    <p>{{post.wrk_2_description}}</p>
{% endif %}
</div>
</td>

これは単純化されたスニペットです-パターンは継続します。基本的に、タイトルがデータベースにある場合はdiv1のみを表示します。title 1title 2の両方がデータベースにある場合は、div1div2などを表示します。

現在、この種の作品はdivを表示したいので、何らかの理由で次の作品も表示しています。 div 1のタイトルがある場合は12が表示され、div 12のタイトルがある場合は1, 2, and 3が表示されます

私はJinja2を初めて使うので本当に混乱しています。それがhtmlでの構文の位置付けなのか、構文が間違っているのか、または2つの変数をチェックできないのか...わかりません。

12
Jesse

Pythonと同様に、0None[]{}および""はFalseです。それ以外は真実です。

「JinjaのifステートメントはPythonのifステートメントに相当します。最も単純な形式では、これを使用して、変数が定義されているか、空でないか、偽でないかをテストできます。」

{% if post and post.wrk_1_title %}

{% endif %}

ドキュメント: http://jinja.pocoo.org/docs/templates/#if

34
Shankar Cabus