Подтвердить что ты не робот

Как разбить "для цикла" в шаблоне Django

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

{% for account in object_list|slice:":1" %}

Ответ 3

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

Ответ 4

Я нашел способ сделать это с условием. Это уродливое и хакерское, но оно работает (для меня). 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" гарантирует, что у нас есть не более трех элементов в этом списке, а grouper - либо True, либо False или ''. Затем мы перебираем список и проверяем значение False.

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

Ответ 5

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

for(var i=0;i<1;i++){
        {% for owner in Owner %}
            id  = "{{owner.id}}";
            if(id == pk1){
                f="{{owner.flat}}";
                break;
            }             
        {% endfor %}
     }

Ответ 6

В этом случае вы можете проверить, если 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 %}