Django模板语言 - 从列表中删除项目

时间:2012-08-24 17:25:10

标签: python django django-templates

一个简单的问题:有没有办法从Django模板语言中删除列表中的项目?

我有一种情况,我正在迭代一个列表,并在另一个列表中打印第一个项目。打印完第一个项目后,我想将其从该列表中删除。

见下文:

{% for item in list1 %}
     {{list2.0}}
     #remove list2.0 from list2
{% endfor %}

提前致谢。

4 个答案:

答案 0 :(得分:8)

如果你的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}}。

答案 1 :(得分:2)

如果可能的话,我会尝试过滤掉视图中的项目。否则,您可以在for循环中添加if或if语句。

{% for item in list%}
    {% if item.name != "filterme" %}
        {{ item.name }}
    {% endif %}
{% endfor %}

答案 2 :(得分:0)

您无法删除项目,但可以获取没有特定项目的列表(在常量索引处)

{% with list2|slice:"1:" as list2 %}
...
{% endwith %}

当然,嵌套规则适用,等等。

一般来说,我发现自己正在进行复杂的数据结构操作,只需将其移动到Python - 它会更快更清洁。

答案 3 :(得分:0)

没有这样的内置模板标签。我们了解到,如果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 %}

在模板中操作列表的内容不是一个好主意。