在Flask中,
@app.route('/test')
def test():
test = ['a','b','c','d','e','f','g',['1','2','3']]
return render_template('test.html',data=test)
这是我的模板:
{% for item in data %}
<tr>
<td>{{item.0}}</td>
<td>{{item.1}}</td>
<td>{{item.2}}</td>
<td>{{item.3}}</td>
<td>{{item.4}}</td>
<td>{{item.5}}</td>
<td>{{item.6}}</td>
</tr>
<tr>
<td colspan="5">{{ item[7][0]}}</td>
<td>{{ item[7][1]}}</td>
<td>{{ item[7][2]}}</td>
</tr>
{% endfor %}
但总是会出现错误:
jinja2.exceptions.UndefinedError: str object has no element 7
如何获取列表中的列表?
看起来jinja2
需要字符串,但是它不能对python item[7][0]
格式进行正规化。我还尝试了item.7.0
和item.7[0]
,但出现了相同的错误。
谢谢!
发布于 2018-01-18 13:42:07
您正在向模板传递一个由8个元素组成的列表(7个字符串和另一个字符串列表)。
然后,在您的Jinja模板中,您将迭代该列表:
{% for item in data %}
然而,在您的循环中,您试图单独访问每个列表成员,但这在循环上下文中是没有意义的。
您的代码将在没有for循环的情况下工作:
<tr>
<td>{{data.0}}</td>
<td>{{data.1}}</td>
<td>{{data.2}}</td>
<td>{{data.3}}</td>
<td>{{data.4}}</td>
<td>{{data.5}}</td>
<td>{{data.6}}</td>
</tr>
<tr>
<td colspan="5">{{ data[7][0]}}</td>
<td>{{ data[7][1]}}</td>
<td>{{ data[7][2]}}</td>
</tr>
输出:
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
<td>e</td>
<td>f</td>
<td>g</td>
</tr>
<tr>
<td colspan="5">1</td>
<td>2</td>
<td>3</td>
</tr>
发布于 2018-01-18 13:44:30
试一试
{% for item in data %}
<tr>
{% if item|string %} #or {% if item is string %}
<td>{{item}}</td>
{% else %}
{% for item_iside in item %}
<td>{{item_iside}}</td>
{% endif %}
</tr>
{% endfor %}
发布于 2018-01-18 13:51:05
谢谢!
我只是没有提供一个很好的测试数据后,马特回答提醒我,我发现我犯了一个愚蠢的错误。在chnage测试之后:
test =[ ['a1','b1','c1','d1','e1','f1','g1',['1','2','3']],
['a2','b2','c2','d2','e2','f2','g2',['2','3','4']]
]
循环现在可以工作了。
谢谢你们。
https://stackoverflow.com/questions/48314435
复制相似问题