如何在Django模板中形成具有可变列的表

时间:2015-10-16 09:41:50

标签: django django-templates

我需要在带有变量列的Django模板中创建一个表,我一直在尝试使用以下代码:

假设我有以下标题:

headers = ['date', 'a', 'b', 'c']
body = [{'date': '2015-10-16', 'a':1, 'b':2, 'c':3},
        {'date': '2015-10-17', 'a':4, 'b':5, 'c':6},
        ....]

正如您所见,标题对应于正文值的键。 所以我一直在尝试使用 for 嵌套循环,但是,我失败了。

<table >
    <thead>
      <tr>
         {% for th in headers %}
           <th>{{th}}</th>
         {% endfor %}
      </tr>
    </thead>
    <tbody>
      {% for bd in body  %}
       <tr>
        {% for h in header  %}
         {% with h as key %}
         <td>{{bd.key}}</td>
         {% endwith %}
        {% endfor %}
       </tr>
      {% endfor %}
    </tbody>
</table>

{{bd.key}}未显示。有解决方案吗或者我需要修改我的桌子。

1 个答案:

答案 0 :(得分:1)

编写自定义模板过滤器:

from django.template.defaulttags import register

@register.filter
def get_dict_item(target_dict, key):
    return target_dict.get(key, '')

用法:

<table>
    <thead>
      <tr>
         {% for th in headers %}
           <th>{{ th }}</th>
         {% endfor %}
      </tr>
    </thead>
    <tbody>
      {% for bd in body  %}
       <tr>
        {% for h in header  %}
         {% with h as key %}
         <td>{{ bd|get_dict_item:key }}</td>
         {% endwith %}
        {% endfor %}
       </tr>
      {% endfor %}
    </tbody>
</table>