一个简单的问题:有没有办法从Django模板语言中删除列表中的项目?
我有一种情况,我正在迭代一个列表,并在另一个列表中打印第一个项目。打印完第一个项目后,我想将其从该列表中删除。
见下文:
{% for item in list1 %}
{{list2.0}}
#remove list2.0 from list2
{% endfor %}
提前致谢。
答案 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 %}
在模板中操作列表的内容不是一个好主意。