Django - 复杂的嵌套列表和元组解包

时间:2013-09-13 22:20:19

标签: python django templates tuples iterable-unpacking

这是简化的,但它从根本上描述了我正在尝试做的事情。

在我的views.py中,我正在构建一个列表列表。每个列表包含商店名称,(产品,价格)元组列表以及(员工,年龄)元组列表。两个元组列表都具有不确定的长度(但在每个相应的行中具有相同的长度)。包含名称和元组列​​表的外部列表也具有不确定的长度。

[[store_name,         [(product_1a, price_1a),(product_2a,price_2a),...],  [(employee_1a, age_1a), (employee_2a, age_2a),...]]
 [another_store_name, [(product_1b, price_1b),(product_2b,price_2b),...],  [(employee_1b, age_1b), (employee_2b, age_2a),...]]
 ...                                                                                                                          ]

上述软件包的每一行都需要解压缩到模板中一行的表格中。我正在为我的模板尝试以下代码:

{% for name, products, employees in package %}
  <tr>
      <td>{{ name }}</td>
    {% for product, price in products %}
      <td>{{ product }}</td> <td>{{ price }}</td>
    {% endfor %}
    {% for employee, age in employees %}
      <td>{{ employee }}</td> <td>{{ age }}</td>
    {% endfor %}
  </tr>
{% endfor %}

实际上 - 我已经尝试了十几种不同的解决方案而且我的智慧结束了。任何有关如何在模板中成功重新包装和解包以实现预期目标的帮助都将非常感激!

P.S。我并没有真正使用store_names,产品和员工,但这似乎是将其放入帖子中的最简单方法。如果您质疑是否需要在一个表格行中包含此类数据,我完全理解!

1 个答案:

答案 0 :(得分:3)

您可以通过arr.0,arr.1等访问模板中的数组序列元素。请参阅此处的文档:https://docs.djangoproject.com/en/1.4/topics/templates/#variables

所以尝试这样的事情:

{% for item in package %}
  <tr>
      <td>{{ item.0 }}</td>
    {% for product in item.1 %}
      <td>{{ product.0 }}</td> <td>{{ product.1 }}</td>
    {% endfor %}
    {% for employee in item.2 %}
      <td>{{ employee.0 }}</td> <td>{{ employee.1 }}</td>
    {% endfor %}
  </tr>
{% endfor %}