web-dev-qa-db-ja.com

Djangoテンプレートで「forループ」を解除する方法

私はこのコードを持っています

    {% for account in object_list %}
        <tr>
        {% for field, value in book.get_fields %}
              <th>{{ field.verbose_name }}</th> 
        {% endfor %}
        </tr>
    {{ break }}
    {% endfor %}

最初の反復後にforループを解除したい。休憩が機能していません

31
tej.tan

Djangoテンプレートシステムにはbreakがありません。 Djangoテンプレートシステムはpythonでプログラミングされていませんが、 独自の言語 でプログラミングされています。

何をする必要があるかによって、 this question が役に立つかもしれません。そうでない場合は、唯一のアカウントを置くだけですあなたは[〜#〜] html [〜#〜]RequestContextの特別なフィールドに印刷しようとしています。

17

スライスを使用して目標を達成する必要があると思います

{% for account in object_list|slice:":1" %}
92
Turikumwe

Breakステートメントは使用できませんが、htmlに印刷しないことを選択できます。これは最善の解決策ではありませんが、使用できます。私は次のものを使用します。

{%for tumbnail in image %}
         {%if tumbnail.object_id == element.id %}
          <img src="/media/{{ tumbnail.image }}" class="tr_all_hover"alt="">

{{ "<!--" }}
  {%endif%} 
{%endfor%}     
{{ "-->" }}

基本的にブラウザ上ではこのように見えます。 http://i.stack.imgur.com/MPbR3.jpg

2
Brkyrn

この場合、forloop.counter == 1かどうか、またはforloop.firstかどうかを確認して、その最初の項目を単に印刷できます。

  {% for account in object_list %}
      {% if forloop.first %}
        <tr>
        {% for field, value in book.get_fields %}
              <th>{{ field.verbose_name }}</th> 
        {% endfor %}
        </tr>
      {% endif %}
    {% endfor %}
1
somecallitblues

あなたはDjangoテンプレートシステムfor javascript for loopを内部ループとして使用でき、次のようにbreakを使用できます。

for(var i=0;i<1;i++){
        {% for owner in Owner %}
            id  = "{{owner.id}}";
            if(id == pk1){
                f="{{owner.flat}}";
                break;
            }             
        {% endfor %}
     }
1
Rohit Shekhar

私は条件でこれを行う方法を見つけました。くてハックですが、動作します(私にとって)。 firstはOPが望んだものですが、これは実際の質問により密接に答えます。

これを考えると:

obj = {
  'children': [
    { 'possessions' : { 'toys': [] } },
    { 'possessions' : { 'toys': ['train'] } }
    { 'possessions' : { 'toys': ['train', 'ball'] } }
  ]
}

私のオブジェクトがおもちゃの所持を持つ子供を持っているかどうかを知りたかった。

私がやったことは次のとおりです。

同等のPython:

if ([child for child in obj.children if child.possessions.toys]):
  # Whatever

Djangoテンプレート:

私のアプローチは、 regroup を使用して、基準に一致する、または一致しない候補のセットを作成することでした。

{% regroup obj.children by possessions.toys|length_is:"0" as by_toys %}
{% for check in by_toys %}{% if check.grouper == False %}
  Whatever
{% endif %}{% endfor %}

regroupは、本質的に次の新しいオブジェクトを作成します。

[
  { 'grouper': '', 'list': [/*...*/] },
  { 'grouper': True, 'list': [/*...*/] },
  { 'grouper': False, 'list': [/*...*/] }
]

length_is:"0"は、リストに最大3つの要素があり、grouperTrueまたはFalseまたは''であることを確認します。次に、リストを反復処理し、False値を確認します。

  • 子がない場合は空のリストになり、ifはヒットしません。
  • 子供におもちゃがない場合は、Falsegrouperのないリストになります。
  • すべての子供がおもちゃを持っている場合、それはFalsegrouperのリストになります。
  • 一部の子供がおもちゃを持っている場合、それはFalseTruegroupersのリストになります。
1
Hounshell