Язык шаблонов 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 %}

это не очень хорошая идея, чтобы манипулировать содержанием списка в шаблонах.