2012-05-08 39 views
17

textsが定義されているかどうかを確認する必要があります。index.htmlです。Jinja2で配列が空であることを確認してください

変数が定義されていて空でない場合は、ループをレンダリングする必要があります。それ以外の場合は、エラーメッセージ{{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のでこれをどのように言うのですか?

+0

あなたは自分自身をより明確に説明する必要があります。これはPythonではありません。これはjinga2のテンプレート言語です。 –

答えて

15

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 %} 
+17

これは、元の質問に従って、空である定義された配列の枝の大文字小文字を失います。 – Andrew

24

存在(?「定義されたらし」)をテストするために、is definedを使用しています。

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

あなたの例には当てはまりませんが、ループ以外のものが必要な場合は、空のチェックのこの形式が便利です

人工の例では、

{% if (texts is defined) and texts %} 
    The first text is {{ texts[0] }} 
{% else %} 
    Error! 
{% endif %} 
+0

'未定義 'も偽ですので、別途テストする必要はありませんが、リストの真実性をテストするだけではない場合には便利です。 – davidism

2

かもしれませんそれは、textsを定義する可能性がありますが、空の文字列である単一のリスト要素が含まれています。

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

あなたはまた、|lengthとそれを結合することがあります。例:textsがあなたの代わりに最初の要素をテストする必要がありますので、真の結果を生成します定義されている場合のテストこの場合

texts = [''] 

、フィルタを使用して1つの要素のみが存在することを確認します。 the documentationで述べたように

{% if texts is defined and texts|length > 0 %} 
    ... 
{% endif %} 
14

私はlength() function経由length of the arrayを見ていると一緒に確認してください)あなたの最善の策は、定義された組み合わせ(だと思いますtextsが未定義の場合とtextsが空の場合の両方を処理します。

+1

'texts | length> 0'は' texts'に相当します - ブールテストの空のリストは 'false'と評価されます。 –

4

を、あなたも書くことができる::

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

関連する問題