45

我有这个代码

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

我想在第一次迭代后打破 for 循环。休息不起作用

4

9 回答 9

117

我认为你应该使用 slice 来实现你的目标

{% for account in object_list|slice:":1" %}
于 2011-11-07T12:31:21.763 回答
22

Django 模板系统中没有break。Django 模板系统不是用python编写的,而是用自己的语言编写的。

根据您需要做什么,您可能会发现这个问题很有用。否则,只需将您尝试在HTML上打印的唯一帐户放在.RequestContext

于 2011-06-28T14:12:27.520 回答
6

您不能使用 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

于 2015-09-09T14:39:40.417 回答
3

您可以在 javascript for 循环中使用 Django 模板系统 for 循环作为内部循环,并且可以使用 break 如下:-

for(var i=0;i<1;i++){
        {% for owner in Owner %}
            id  = "{{owner.id}}";
            if(id == pk1){
                f="{{owner.flat}}";
                break;
            }             
        {% endfor %}
     }
于 2018-02-02T19:36:06.760 回答
3
     {% for i in list %}
      {% if forloop.counter < 11 %}                                     
        <tr>
          <td>{{ forloop.counter }}</td>
          <td>{{ i.product__name }}</td>
          <td>{{ i.brand__name }}</td>
          <td>{{ i.country__name}}</td> 
          <td>{{ i.city__name}}</td>  
                     
        </tr>
      {% endif %} 
             
      {% endfor %}
于 2021-03-18T18:31:15.110 回答
2

我找到了一种有条件的方法。它丑陋而骇人听闻,但它(对我来说)有效。 first是OP想要的,但这更接近地回答了实际问题。

鉴于这种:

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

我想知道我的 obj 是否有任何拥有玩具的孩子。

这是我所做的:

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"确保我们在该列表中最多包含三个元素,并且grouperTrueFalse''。然后我们遍历列表并检查一个False值。

  • 如果没有孩子,它将是一个空列表,并且if永远不会被击中。
  • 如果没有孩子有玩具,那将是一个没有False grouper.
  • 如果所有孩子都有玩具,那将是一个带有False grouper.
  • 如果有些孩子有玩具,那将是一个带有FalseTrue groupers 的列表。
于 2016-12-16T18:45:57.203 回答
1

在这种情况下,您可以检查 forloop.counter == 1 或 if 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 %}
于 2019-01-31T00:15:41.823 回答
1

Django 模板系统中没有break,但您可以使用以下架构实现类似 break 的语句。(循环会迭代,但你什么都不做。)

1- 使用 with 定义一个变量来确定当前状态,

2-使用模板自定义标签更改语句以否定当前状态。

在这样的模板使用中:

{% with statement=1 %}
   {% for obj in listObject %}
       {% if ifStatement and statement %}
           {% changeStatement statement as statement %} // when u don't want to enter in if again.
           Do your job here!!
       {% endif %}
   {% endfor %}
{% endwith %}

在模板自定义标签中:

@register.simple_tag
def changeStatement(status):
    return not status
于 2021-07-17T09:33:28.920 回答
0

正如上面提到的,切片是最好的!

或者,您可以将模板变量用于更复杂的继续/中断:

如何在 Django 模板中使用 break 和 continue?

于 2021-11-04T10:09:17.483 回答