59

で変数textsが定義されているかどうかを確認する必要がありますindex.html

変数が定義されていて空でない場合は、ループをレンダリングする必要があります。それ以外の場合は、エラー メッセージを表示します{{error}}

基本的にこれはPHPで

if (isset($texts) && !empty($texts)) {
    for () { ... }
}
else {
    print $error;
}

index.html

{% for text in texts %} 
    <div>{{error}}</div>
    <div class="post">
        <div class="post-title">{{text.subject}}</div>
        <pre class="post-content">{{text.content}}</pre>
    </div>
{% endfor %}

jinja2 でこれをどのように言うのですか?

4

8 に答える 8

59

あなたの最善の策は、length() 関数を介して配列の長さを調べることと一緒に defined() チェックを組み合わせることだと思います:

{% if texts is defined and texts|length > 0 %}
    ...
{% endif %}
于 2016-07-25T17:19:26.403 に答える
54

存在をテストするには (「定義済みかどうか」?)、 を使用しますis defined

現在のリストが空でないことをテストするには、リスト自体を条件として使用します。

あなたの例には当てはまらないようですが、この形式の空チェックは、 loop 以外のものが必要な場合に役立ちます。

人為的な例は

{% if (texts is defined) and texts %}
    The first text is {{ texts[0] }}
{% else %}
    Error!
{% endif %}
于 2015-05-05T20:15:29.867 に答える
32

Jinja2 のドキュメントを見てみましょうdefined(): http://jinja.pocoo.org/docs/templates/#defined

{% if variable is defined %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined
{% endif %}

それは十分に明確ですか?あなたの場合、次のようになります。

{% if texts is defined %}
    {% for text in texts %} 
        <div>{{ error }}</div>
        <div class="post">
            <div class="post-title">{{ text.subject }}</div>
            <pre class="post-content">{{ text.content }}</pre>
        </div>
    {% endfor %}
{% else %}
    Error!
{% endif %}
于 2012-05-08T18:06:34.723 に答える
5

これは私にとってうまくいったきちんとしたシンプルなソリューションです!

{% if texts is defined and texts[0] is defined %}
    ...
{% endif %}
于 2018-08-10T22:16:27.880 に答える
2

texts定義できても、空の文字列である単一のリスト要素が含まれている可能性があります。例えば:

texts = ['']

この場合、textsが定義されているかどうかをテストすると真の結果が得られるため、代わりに最初の要素をテストする必要があります。

{% if texts[0] != '' %}
    ..code here..
{% endif %}

|lengthそれをフィルターと組み合わせて、要素が 1 つだけであることを確認することもできます。

于 2016-06-09T23:42:40.143 に答える