2012-05-01 61 views
2

我的编码是: 观点在Django的循环迭代

型号:

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,其他部分,它会一次又一次显示值。但我只需要一次。当我进入其他条件时,如何打破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标记不会为您提供任何打破循环的方法。您只需在自己的视图中过滤集合,并在条件失败后将其切片并将其提供给模板。

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子句的条目。