Язык шаблонов Django-удалить элемент из списка
просто быстрый вопрос: есть ли способ удалить элемент из списка на языке шаблонов Django?
У меня есть ситуация, когда я перебираю один список и печатаю первый элемент в другом списке. Как только первый элемент будет напечатан, я хочу удалить его из этого списка.
см. ниже:
{% for item in list1 %}
{{list2.0}}
#remove list2.0 from list2
{% endfor %}
спасибо заранее.
4 ответов
Если ваши list1 и list2 действительно списки, а не запросы, это, кажется, работает:
{{ list2 }} {# show list2 #}
{% for item in list1 %}
{{ list2.0 }}
{# remove list2.0 from list2 #}
{{ list2.pop.0 }}
{% endfor %}
{{ list2 }} {# empty #}
отметим, что pop
в этом случае не возвращается, поэтому вам все равно нужно {{ list2.0 }} явно.
Я бы попытался отфильтровать элемент в представлении, если это вообще возможно. В противном случае вы можете добавить оператор if или if not внутри цикла for.
{% for item in list%}
{% if item.name != "filterme" %}
{{ item.name }}
{% endif %}
{% endfor %}
вы не можете удалить элемент, но вы можете получить список без определенного элемента (с постоянным индексом)
{% with list2|slice:"1:" as list2 %}
...
{% endwith %}
конечно, применяются правила вложенности и т. д.
В общем, я нахожу, что вы делаете сложную манипуляцию структурой данных, просто переместите ее на Python-это будет быстрее и чище.
нет такого встроенного тега шаблона. Я понимаю, что вы не хотите печатать первый элемент list2
если list1
не пуст. Попробуйте:
{% for item in list1 %}
{{list2.0}}
...
{% endfor %}
{% for item in list2 %}
{% if list1 and forloop.counter == 1 %}
# probably pass
{% else %}
{{ item }}
{% endif %}
{% endfor %}
это не очень хорошая идея, чтобы манипулировать содержанием списка в шаблонах.