3

我正在尝试执行以下操作(不起作用,只是为了传达预期的行为):

<table>
  <tr>
    <th>Column 1</th>
    <th>Column 2</th>
    <th>Column 3</th>
  </tr>

  {% for col1_val in col1_values %}
    <tr>
      <td>{{ col1_val }}</td>
      <td>{{ col2_values[col1_values.index(col1_val)] }}</td>
      <td>{{ col3_values[col1_values.index(col1_val)] }}</td>
    </tr>
  {% endfor %}
</table>

所需的表格是:

Column 1       Column 2       Column 3
col1_values[0] col2_values[0] col3_values[0]
col1_values[1] col2_values[1] col3_values[1]
.
.
.

其中 col1_values 彼此唯一。

Jinja2 模板应该如何重写才能实现想要的表格输出呢?是否可以不必转置 col1_values、col2_values 和 col3_values 的维度?如果不是,那么最 Pythonic 的转置方式是什么?

4

2 回答 2

4

为什么不使用嵌套列表呢?循环结构如下:

table_values = [[col1_value_0, col2_value_0, col3_value_0], [col1_value_1, col2_value_1, col3_value_1], ...]

如果需要,zip() 函数可以组合 3 个 colX_values 列表:

table_rows = zip(col1_values, col2_values, col3_values)

现在您有要循环的每行列表:

{% for col1_val, col2_val, col3_val in table_rows %}
  <tr>
    <td>{{ col1_val }}</td>
    <td>{{ col2_val }}</td>
    <td>{{ col3_val }}</td>
  </tr>
{% endfor %}
于 2013-05-19T11:42:16.780 回答
1

我认为你有三个列表 col1_values、col2_values 和 col3_values。在视图中,将列表构造为:

col_values = zip(col1_values, col2_values, col3_values)

将 col_values 传递给模板并执行以下操作:

<table>
  <tr>
    <th>Column 1</th>
    <th>Column 2</th>
    <th>Column 3</th>
  </tr>

  {% for col1, col2, col3 in col_values %}
    <tr>
      <td>{{ col1 }}</td>
      <td>{{ col2 }}</td>
      <td>{{ col3 }}</td>
    </tr>
  {% endfor %}
</table>

我认为这将是解决您的问题的简单方法。希望能帮助到你。

于 2013-05-19T10:53:04.820 回答