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 )

显示.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 部分,它一次又一次地显示值。但我只需要一次。当我进入 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 回答