Skip to main content
 首页 » 编程设计

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

2025年05月04日23jackei

在 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 需要字符串,但它不能regonize python item[7][0] 格式。 我也尝试了 item.7.0 和 item.7[0] ,但同样的错误。

谢谢!

请您参考如下方法:

您向模板传递了一个包含 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>