Django如何将字典中的每个列表转换为cloumn?

时间:2018-02-08 21:13:41

标签: django django-templates

我有一个包含6个键的字典,每个键的值是一个包含100个元素的列表

my_dict = {"Key1":["name1", "name2", ..., "name100"],
           "Key2":["id1", "id2", ..., "id100"],
            ...
           "Key6":["type1", "type2", ..., "type100"]}

我正在尝试创建一个100 x 6的表,其中每列都是一个列表。 我已经尝试了模板中的所有内容,并且每次都很简短。我缺少一些简单的概念吗?我应该操纵后端的数据以使其更易于管理吗?

编辑:我可能应该更清楚。我可以渲染我的模板,我可以把东西放在桌子上,而不是我想要的。

我可以做像

这样的事情
<tr>
  {% for i in my_dict.items %} 
  <td>{{i}}</td>
  {% endfor %}
</tr>

给我一​​行6列

{% for items in dict.items %}
  <tr>
    {% for item in items %}
      <td>{{item}}</td>
    {% endfor %}
  </tr>
{% endfor %}

给我6行100列

我能做到

{% for item in dict.Key1 %}
  <tr>
    <td>{{item}}</td>
  </tr>
{% endfor %}

给我1列和100行

但我需要在每个列表中的每个项目都在自己的列中。

2 个答案:

答案 0 :(得分:2)

如果我是正确的,你的桌子需要有6列和100行吗?如果是这样,很难在模板中执行此操作,我会在将数据发送到模板之前编辑数据。通常,您应该始终尝试保持模板之外的复杂逻辑。

查看:

def get_context_data(self, **kwargs):
    context = super(YOUR_CLASS_HERE, self).get_context_data(**kwargs)
    # I defined each list this way just to test
    my_dict = {
        "Key1": ["name1", "name2", "name100"],
        "Key2": ["id1", "id2", "id100"],
        "Key6": ["type1", "type2", "type100"]
    }
    my_data = [[v[i] for k, v in my_dict.items()] for i in range(3)]  # This would be range(100) for you, once again I was just testing.
    context['my_data'] = my_data
    return context

在模板中:

<table>
    <thead>
    </thead>
    <tbody>
        {% for row in my_data %}
            <tr>
            {% for entry in row %}
                <td>{{ entry }}</td>
            {% endfor %}
            </tr>
        {% endfor %}
    </tbody>
</table>

编辑:我相信这个解决方案能够以最佳方式解决您的问题。当然,它在视图而不是模板中完成工作,但您不希望在模板中执行此类数据操作。该解决方案使用1行代码更改数据:

my_data = [[v[i] for k, v in my_dict.items()] for i in range(100)]

在python中使用模板中的模板标签要容易得多。如果不编写自定义模板标记,我无法想到在模板中执行此操作的方法。如果你确实使用了自定义模板标签,那么你仍然使用python,所以你应该在视图中完成它。

答案 1 :(得分:0)

可能是你要求这个(如何在模板面上呈现这个字典)。试试这个,我希望,我的问题是正确的,因为它不太清楚,否则让我纠正。

{% for key, value_list  in my_dict.items %}
  # your stuff 
  {% for value in value_list %}
    # more stuff here (2)
  {% endfor %}
{% endfor %}