如何使用Python和Flask渲染带有两个列表的Jinja HTML列表?

时间:2019-12-16 17:37:27

标签: python html for-loop flask

我正在处理一个动态表,其中一些条目是通过简单的Python连接从数据库中提取的。我正在与Flask和Jinja合作来渲染HTML。

为此,我使用cur.fetchall():

cur.execute('SELECT * FROM conceptos WHERE conceptos.conceptoTipo = 1')
data = cur.fetchall()

但是,我有兴趣修改每个条目的特定值,在本例中是第9位的值。为此,我创建了一个列表并使用 for 通过数据中的条目,如下所示:

x = []
for i in data:
    x.append(i[9]+1) #Just adding 1 to the numeric value for testing the change.

最后,我使用render_template返回两个变量:

return render_template('descuentosBeneficiarios.html', conceptos = data, operas = x)

在HTML内,我使用Jinja2在一个简单表中动态显示变量:

{% for concepto in conceptos %}

<tr>
  <!-- Recorrer Campos de Tabla-->
  <td>{{concepto.0}}</td>
  <td>{{operas}}</td>
  <td>{{concepto.2}}</td>
  <td>{{concepto.3}}</td>
  <td>{{concepto.4}}</td>
  <td>{{concepto.5}}</td>
  <td>{{concepto.6}}</td>
  <td>{{concepto.7}}</td>
  <td>{{concepto.8}}</td>
  <td>{{concepto.9}}</td>
  <td>{{concepto.10}}</td>
  <td>{{concepto.11}}</td>
  <td>
</tr>
{% endfor %}

因此,对于每一行,我都获得了第二列的 operas 列表中的所有值,并且第一行只需要第一行,第二行只需要第二行,等等,但是我不知道该怎么做。

感谢一切!

1 个答案:

答案 0 :(得分:0)

这边有很多假设,但是如果operas的长度等于conceptos中元素的长度,则可以使用loop.index来访问必需的元素。

{% for concepto in conceptos %}
<tr>
  <td>{{concepto.0}}</td>
  <td>{{operas[loop.index]}}</td>
  <td>...</td>
</tr>

但是,如果您只需要修改data中的一个值,为什么要使用第二个列表?将无法解决问题:

for i in data:
    i[9] += 1

或者如果您需要第9个元素的原始值:

for i in data:
    i.append(i[9] + 1)

这样,您将把它作为第12个元素。

正如我所说,有很多假设。