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

Niu*_*uya 1 python jinja2 flask

在烧瓶中,

@app.route('/test')
def test():
    test = ['a','b','c','d','e','f','g',['1','2','3']]
    return render_template('test.html',data=test)
Run Code Online (Sandbox Code Playgroud)

这是我的模板:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

但是总是报错:

jinja2.exceptions.UndefinedError: str object has no element 7
Run Code Online (Sandbox Code Playgroud)

如何获取列表中的列表?

看起来像jinja2需要字符串,但它不能 regonize pythonitem[7][0]格式。我也试过item.7.0and item.7[0],但同样的错误。

谢谢!

Mat*_*aly 5

您正在向模板传递一个由 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> 
Run Code Online (Sandbox Code Playgroud)

输出:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 但是如何使用 for 循环来实现呢? (2认同)