Как разбить "для цикла" в шаблоне Django - PullRequest
31 голосов
/ 28 июня 2011

У меня есть этот код

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

Я хочу разорвать цикл for после первой итерации.перерыв не работает

Ответы [ 6 ]

90 голосов
/ 07 ноября 2011

Я думаю, что вы должны использовать ломтик для достижения своей цели

{% for account in object_list|slice:":1" %}
16 голосов
/ 28 июня 2011

В шаблонной системе Django нет break. Система шаблонов Django не программируется на python , но на своем собственном языке .

В зависимости от того, что вам нужно сделать, вы можете найти этот вопрос полезным. В противном случае, просто укажите одну и единственную учетную запись , которую вы пытаетесь распечатать на HTML , в специальном поле на RequestContext.

2 голосов
/ 09 сентября 2015

Вы не можете использовать оператор 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

1 голос
/ 31 января 2019

В этом случае вы можете проверить, если forloop.counter == 1 или 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 %}
1 голос
/ 02 февраля 2018

Вы можете использовать вашу систему шаблонов Django для цикла в javascript для цикла в качестве внутреннего цикла и использовать разрыв следующим образом: -

for(var i=0;i<1;i++){
        {% for owner in Owner %}
            id  = "{{owner.id}}";
            if(id == pk1){
                f="{{owner.flat}}";
                break;
            }             
        {% endfor %}
     }
1 голос
/ 16 декабря 2016

Я нашел способ сделать это с условием. Это уродливо и нахально, но работает (для меня). first - это то, что хотел ОП, но это более точно отвечает на реальный вопрос.

Учитывая это:

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

Я хотел знать, есть ли у моего ребенка дети с игрушками.

Вот что я сделал:

Эквивалент 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" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 *] * * * * * * * * * * * * * * * * * * * * * * * * всего 10 *. Затем мы перебираем список и проверяем значение False.

  • Если бы не было детей, это был бы пустой список, и if никогда не был бы поражен.
  • Если бы у детей не было игрушек, это был бы список без False grouper.
  • Если бы у всех детей были игрушки, это был бы список с False grouper.
  • Если у некоторых детей есть игрушки, это будет список с False и True grouper s.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...