首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在jinja2模板中获取列表中的列表

如何在jinja2模板中获取列表中的列表
EN

Stack Overflow用户
提问于 2018-01-18 13:31:22
回答 3查看 8.3K关注 0票数 1

在Flask中,

代码语言:javascript
运行
复制
@app.route('/test')
def test():
    test = ['a','b','c','d','e','f','g',['1','2','3']]
    return render_template('test.html',data=test)

这是我的模板:

代码语言:javascript
运行
复制
{% 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 %}

但总是会出现错误:

代码语言:javascript
运行
复制
jinja2.exceptions.UndefinedError: str object has no element 7

如何获取列表中的列表?

看起来jinja2需要字符串,但是它不能对python item[7][0]格式进行正规化。我还尝试了item.7.0item.7[0],但出现了相同的错误。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-18 13:42:07

您正在向模板传递一个由8个元素组成的列表(7个字符串和另一个字符串列表)。

然后,在您的Jinja模板中,您将迭代该列表:

{% for item in data %}

然而,在您的循环中,您试图单独访问每个列表成员,但这在循环上下文中是没有意义的。

您的代码将在没有for循环的情况下工作:

代码语言:javascript
运行
复制
<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> 

输出:

代码语言:javascript
运行
复制
<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>
票数 5
EN

Stack Overflow用户

发布于 2018-01-18 13:44:30

试一试

代码语言:javascript
运行
复制
{% 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 %}
票数 3
EN

Stack Overflow用户

发布于 2018-01-18 13:51:05

谢谢!

我只是没有提供一个很好的测试数据后,马特回答提醒我,我发现我犯了一个愚蠢的错误。在chnage测试之后:

代码语言:javascript
运行
复制
test =[ ['a1','b1','c1','d1','e1','f1','g1',['1','2','3']],
        ['a2','b2','c2','d2','e2','f2','g2',['2','3','4']]
        ]

循环现在可以工作了。

谢谢你们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48314435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档