Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模板语言-从列表中删除项_Python_Django_Django Templates - Fatal编程技术网

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

Python Django模板语言-从列表中删除项,python,django,django-templates,Python,Django,Django Templates,只是一个简单的问题:在Django模板语言中有没有一种方法可以从列表中删除一个项目 我有一种情况,我迭代一个列表,然后打印另一个列表中的第一项。打印第一项后,我想将其从列表中删除 见下文: {% for item in list1 %} {{list2.0}} #remove list2.0 from list2 {% endfor %} 提前感谢。如果可能的话,我会尝试过滤掉视图中的项目。否则,可以在for循环中添加if或if not语句 {% for item in l

只是一个简单的问题:在Django模板语言中有没有一种方法可以从列表中删除一个项目

我有一种情况,我迭代一个列表,然后打印另一个列表中的第一项。打印第一项后,我想将其从列表中删除

见下文:

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

提前感谢。

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

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

您不能删除某个项目,但可以在没有特定项目的情况下获取列表(在恒定索引下)

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


一般来说,如果您发现自己正在进行复杂的数据结构操作,只需将其移动到Python即可,这样会更快更干净。

没有这样的内置模板标记。我知道如果
list1
不是空的,您不想打印
list2
的第一项。尝试:

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

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

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

如果您的列表1和列表2确实是列表而不是查询集,那么这似乎是可行的:

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

请注意,
pop
在本例中不返回,所以您仍然需要显式地{{list2.0}}。

是否要在列表上迭代,排除某些元素?如果是,您可以将
If
station放入
循环体的
中。感谢Konrad,我刚刚编辑了一个示例,说明了我正试图做的事情。我不会真正将逻辑放入您的模板中。另外,在循环浏览列表1时,显示的是一个列表2项;对吗?我认为您可以在模板中使用
pop
,前提是您的列表实际上是一个列表,而不是一个查询集(否则,在您看来,do
queryset=list(queryset)
。然后,在您的模板中,尝试
{list2.pop}
。我也不确定您是否可以为pop提供一个类似
的参数{{list2.pop | forloop.counter}
。最后,您可以编写自己的
pop
标记来实现这一点。如果您愿意,我可能会为此编写一些代码。感谢大家的努力,正如建议的那样,用Django模板语言从列表中删除项不是一个好主意,我将寻找另一个解决方案,但对于任何好奇的人,请你真的可以用pop来实现这个{{list2.pop.0}}你确定这不会引起像“pop函数没有0属性”这样的错误吗?测试了这个,它成功了。另请参见Ruth对她的问题的第二个评论。
{{ list2 }}  {# show list2 #}
{% for item in list1 %}
    {{ list2.0 }}
    {# remove list2.0 from list2 #}
    {{ list2.pop.0 }}
{% endfor %}
{{ list2 }}  {# empty #}