相当于python;在「;Django模板中的循环
我试图在django模板中迭代列表。在python中,它如下所示,并且可以正常工作:相当于python;在「;Django模板中的循环,django,django-templates,Django,Django Templates,我试图在django模板中迭代列表。在python中,它如下所示,并且可以正常工作: l=[lots ot touples] for li in range(len(l)): print(l[li]) 但在django模板中,它不起作用。我的问题是:django模板中迭代列表最简单的等价物是什么 我的django模板: <html> <body> {% for w in l %} <li>{{ w }}</li> {% endfor
l=[lots ot touples]
for li in range(len(l)):
print(l[li])
但在django模板中,它不起作用。我的问题是:django模板中迭代列表最简单的等价物是什么
我的django模板:
<html>
<body>
{% for w in l %}
<li>{{ w }}</li>
{% endfor %}
</body>
</html>
<html>
<body>
{% for item in l %}
<li>{{ item }}</li>
{% endfor %}
</body>
</html>
我希望列表中的每一项都分配给touple。
我想做的是分配touple,例如:
touple1=('From1','subject1','Thu,2015年11月12日09:46:34+0100')
所以我以后可以叫“from”、“subject”或“date”
问候
也许我会用另一种方式来表达,让它更清楚:
用于循环遍历电子邮件(Touple列表)
(……)
等等
解决了。谢谢大家的帮助。每一个解决方案都对我有帮助。我想标记两个答案(如果可能的话)作为一个非常有用的方法,向我展示解决同一问题的不同方法。我想说的是,每一个帮助对我都是非常有用的。
你介意我把阿拉斯代尔和诺亚的答案记为正确答案吗(不知道我能记多少) 您可以做一件非常类似的事情: 如果是元组,则可以将值解压为多个变量
{% for item1, item2 in items_list %}
无需将
range
与len
一起使用,就可以像在C或JavaScript中那样进行操作,只需对其进行迭代:
l=[some array elements]
for item in l:
print(item)
在模板中:
<html>
<body>
{% for w in l %}
<li>{{ w }}</li>
{% endfor %}
</body>
</html>
<html>
<body>
{% for item in l %}
<li>{{ item }}</li>
{% endfor %}
</body>
</html>
编辑:
l=[lots ot touples]
如果元组只有两项,请坚持@danielfranca的答案:
{% for item1, item2 in items_list %}
....
{% endfor %}
如果元组的长度是可变的,则必须再次迭代:
{% for tup in items_list %}
{% for item in tup %}
<li>{{ item }}</li>
{% endfor %}
{% endfor %}
{items\u list%}
{tup%中项目的%s}
{{item}}
{%endfor%}
{%endfor%}
您的解决方案看起来是正确的。您已经按照文档中所示正确地构建了它:
但是,您正在引用的列表可能不在模板的上下文中,因此模板无法看到它。确保将列表添加到上下文中:
鉴于列表包含元组,您需要访问元组的每个元素。如果元组完全相同,并且每个元组正好包含三个项,则可以将它们解包:
<html>
<body>
{% for from, subject, date in l %}
<li>{{ from }}, {{ subject }}, {{ date }}</li>
{% endfor %}
</body>
</html>
然后将新列表传递给模板上下文
<html>
<body>
{% for email in email_list %}
<li>{{ email.from }}, {{ email.subject }}, {{ email.date }}</li>
{% endfor %}
</body>
</html>
{电子邮件列表%中的电子邮件为%0}
{{email.from}、{email.subject}、{{email.date}
{%endfor%}
给定以下元组列表:
emails = [
('From1', 'subject1', 'Thu, 12 Nov 2015 09:46:34 +0100')
('From2', 'subject2', 'Thu, 12 Nov 2015 13:48:58 +0100')
('From3', 'subject3', 'Thu, 12 Nov 2015 14:12:34 +0100')
]
您可以循环遍历元组,并使用.0
或.2
按索引访问元素:
{% for email in emails %}
{{ email.0 }} - {{ email.1 }} - {{ email.2 }}
{% endfor %}
或者,您可以解压缩元组变量:
{% for from, subject, date in emails %}
{{ from }} - {{ subject }} - {{ date }}
{% endfor %}
顺便说一句,您的Python代码不是很像Python。而不是在一个范围内循环
emails = [...]
for li in range(len(emails)):
print(emails[li])
您可以直接在列表上循环
for email in emails:
print(emails)
您可以执行与Django模板中相同的解包操作
for from, sender, date in emails:
print(from, sender, date)
感谢您的快速回答,但是我的列表(l)中充满了touple(不是名字),所以我必须通过list.count或类似的方式对它们进行迭代。不管怎样,我知道这个解决方案:我今天整天都在谷歌上搜索。如果是元组,你可以编写一个与我的第二个例子非常相似的代码。我刚刚更新了答案。所有元组的长度都一样吗?否则,该示例将不会使工作元组始终具有3个字段(from、subject、date)。考虑到python可能会工作,但这不是您应该做的(它会创建不必要的列表和查找…)您实际上想做什么?迭代元组列表?我的列表包含电子邮件。每个列表[1]包含1封邮件,如此一来,列表[2]包含2封邮件。每封邮件(touple)都包含“发件人邮件”、“主题邮件”和“日期邮件”标题。我认为一切都进展顺利。实际上,这个列表包含电子邮件消息,所以若我使用“for”语句,我会得到类似于:“(mail1-from,mail1-subject,mail1-date)”的内容,所以我想去掉括号
{% for email in emails %}
{{ email.0 }} - {{ email.1 }} - {{ email.2 }}
{% endfor %}
{% for from, subject, date in emails %}
{{ from }} - {{ subject }} - {{ date }}
{% endfor %}
emails = [...]
for li in range(len(emails)):
print(emails[li])
for email in emails:
print(emails)
for from, sender, date in emails:
print(from, sender, date)