6

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

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

见下文:

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

提前致谢。

4

4 回答 4

8

If your list1 and list2 are indeed lists and not querysets, this seems to work:

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

Note that pop does not return in this case, so you still need {{ list2.0 }} explicitly.

于 2012-08-24T17:58:34.507 回答
2

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

{% for item in list%}
    {% if item.name != "filterme" %}
        {{ item.name }}
    {% endif %}
{% endfor %}
于 2012-08-24T17:34:52.093 回答
0

你不能删除一个项目,但你可以得到没有某个项目的列表(在一个恒定的索引)

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

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

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

于 2012-08-24T17:42:55.487 回答
0

没有这样的内置模板标签。我了解您不想打印list2iflist1的第一项不为空。尝试:

{% for item in list1 %}
     {{list2.0}}
     ...
{% endfor %}

{% for item in list2 %}
     {% if list1 and forloop.counter == 1 %}
         # probably pass
     {% else %}
         {{ item }}
     {% endif %}
{% endfor %}

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

于 2012-08-24T17:45:20.357 回答