2

私のコーディングは:ビュー

def showThread(request, thread_id)
    post_list     = Post.objects.filter(id = thread_id)
    post_likes    = PostLikes.objects.all()
    return render_to_response('show.html',locals(),context_instance=RequestContext(request))

モデル:

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

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

show.html、else部分では、値が何度も表示されます。しかし、必要なのは1回だけです。else条件に入ったときにforループを解除するにはどうすればよいですか。助けてください。

4

4 に答える 4

5

Djangoのforタグは、ループから抜け出すための手段を提供しません。独自のビューでコレクションをフィルタリングし、条件が失敗した時点でコレクションをスライスして、テンプレートに提供するだけです。

于 2012-05-01T12:27:55.443 に答える
2

このdjangoスニペットページにあるdjangoカスタムテンプレートタグを使用できます。使用に疑問がある場合は、このページにアクセスして、カスタムテンプレートタグについて学習してください。

次に、を使用してテンプレートタグをテンプレートにロードします{% 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ループはelse部分に入ると壊れます。

于 2012-08-31T12:20:20.003 に答える
1

ifchangedおそらくタグを使用できます:
https ://docs.djangoproject.com/en/dev/ref/templates/builtins/?from = olddocs#ifchanged

ただし、おそらくこのロジックを表示に移動することを検討する必要があります。

于 2012-05-01T12:59:20.503 に答える
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句への最初のエントリであることを示すフラグを設定することです。

于 2012-05-01T13:02:29.217 に答える