2012-05-01 16 views
2

に私のコーディングは次のとおりです。 ビューはジャンゴ

モデル:

class Post(models.Model): 
     subject = models.CharField(max_length = 250) 
     body = models.TextField() 
     thread = models.ForeignKey('self', null = True, editable = False) 

Show.html:show.htmlで

{% for post in post_list %} 
    {{post.id}}{{post.subject}} 
{% endfor %} 
{% for post_like in post_likes %} 
    {% if post_like.post_id == post.id and post_like.user_id == user.id %} 
     U like this post{{post}} 
    {% else %} 
     {{post}} 
    {% endif %}  
{% endfor %} 

、それ以外の部分、値を何度も表示します。しかし、私は一回だけ必要です。私は他の状態に入るときにforループを壊すことができます。私を助けてください。

答えて

2

django snippets pageにあるdjangoカスタムテンプレートタグを使用できます。使用に疑問がある場合は、this pageにアクセスしてカスタムテンプレートタグについて学んでください。

{% load loop_break %}を使用してテンプレートにテンプレートタグを読み込みます。その後、下記のようあなたがforループを破ることができます:それは他の一部を入力したときに

{% for post_like in post_likes %} 
    {% if post_like.post_id == post.id and post_like.user_id == user.id %} 
     U like this post{{post}} 
    {% else %} 
     {{post}} 
     {{ forloop|break }} 
    {% endif %} 
{% endfor %} 

ここでは、forループ解除されます。

+0

このスニペットは、Python 2.7.6とDjango 1.8.15でうまく動作しています。ありがとう。 – user3526918

4

Djangoのforタグは、ループから脱出する手段を提供しません。自分のビューでコレクションをフィルタリングし、条件が満たされなくなった時点でコレクションをスライスし、それをテンプレートに供給するだけです。
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#ifchanged

しかし、あなたはおそらく表示するには、このロジックを移動することを検討すべきである:

1

おそらくifchangedタグを使用することができます。

1

あなたは出力何もしたいときを検出するためにあなたのif文を構築することができれば、あなたは、単にあなたのelse節の内側に何も置くことはできませんが:

{% for post_like in post_likes %} 
    {% if post_like.post_id == post.id and post_like.user_id == user.id %} 
     U like this post{{post}} 
    {% else %} 
     {% if forloop.first %} 
      {{post}} 
     {%else%}{%endif%} 
    {% endif %}  
{% endfor %} 

上記は、あなたが望むかなり何いない可能性があります - あなたが持っていますそれを自分で調整する。あなたができない唯一のことは、これがelse節への最初の項目であることを示すフラグを設定することです。