我有一个包含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行
但我需要在每个列表中的每个项目都在自己的列中。
答案 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 %}