Как разбить "для цикла" в шаблоне 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 не работает
Ответы
Ответ 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 %}