Django模板表

时间:2017-04-24 12:12:19

标签: django django-templates

我有3个词典数据[' d1'],数据[' d2']和数据[' d3']。

我想要的是这样的表,从每个字典中获取密钥并将它们呈现为:

Team 1        |   Team 2       |   Team 3
key 1 from d1 |  key 1 from d2 |  key 1 from d3
key 2 from d1 |  key 2 from d2 |  key 2 from d3
key 3 from d1 |  key 3 from d2 |  key 3 from d3
key 4 from d1 |  key 4 from d2 |  key 4 from d3

我尝试了什么

<thead>
    <tr>
        <th>Team 1</th>
        <th>Team 2</th>
        <th>Team 3</th>
    </tr>
</thead>
<tbody>
    <tr>
    {% for key, value in d1.items %}
        <td>{{ key }}</td>
    {% endfor %}
    </tr>
    <tr>
    {% for key, value in d2.items %}
        <td>{{ key }}</td>
    {% endfor %}
    </tr>
    <tr>
    {% for key, value in d3.items %}
        <td>{{ key }}</td>
    {% endfor %}
    </tr>
</tbody>

<thead>
    <tr>
        <th>Team 1</th>
        <th>Team 2</th>
        <th>Team 3</th>
    </tr>
</thead>
<tbody>
    {% for key, value in d1.items %}
    <tr>
        <td>{{ key }}</td>
    </tr>
    {% endfor %}
    {% for key, value in d2.items %}
    <tr>
        <td>{{ key }}</td>
    </tr>
    {% endfor %}
    {% for key, value in d3.items %}
    <tr>
        <td>{{ key }}</td>
    </tr>
    {% endfor %}
</tbody>

但它以不同的方式显示它们。我怎样才能实现上表?

当前表格显示如下:

Stalone Sobont  arda    AAA
Sardina Jhonny  Lala    Vali
LilJon  Scuipy  SSS     Mazare

views.py

stats = data['scoruri'].copy()
    data['d1'] = {}
    data['d2'] = {}
    data['d3'] = {}

for key, value in stats.copy().items():
    if not data['d1'] or sum(data['d1'].values()) <= sum(data['d2'].values()) and \
                         sum(data['d1'].values()) <= sum(data['d3'].values()):
        name, score = max(stats.items(), key=lambda p: p[1])
        data['d1'][name] = score
        stats.pop(name, score)
        data['total_1'] = sum(data['d1'].values())
    elif not data['d2'] or sum(data['d2'].values()) <= sum(data['d1'].values()) and \
                           sum(data['d2'].values()) <= sum(data['d3'].values()):
        name, score = max(stats.items(), key=lambda p: p[1])
        data['d2'][name] = score
        stats.pop(name, score)
        data['total_2'] = sum(data['d2'].values())
    elif not data['d3'] or sum(data['d3'].values()) <= sum(data['d1'].values()) and \
                           sum(data['d3'].values()) <= sum(data['d2'].values()):
        name, score = max(stats.items(), key=lambda p: p[1])
        data['d3'][name] = score
        stats.pop(name, score)
        data['total_3'] = sum(data['d3'].values())

2 个答案:

答案 0 :(得分:0)

您希望dict的所有键都打印在中,而您要在行中打印dict的所有键

您可以将dicts组合到一个列表中(在视图中),然后在模板中迭代此列表。

在视图中:

data_dicts = [d1,d2,d3] 

在模板中:

<tr>
{% for d in data_dicts %}
    {% for key, value in d.items %}
        <td> {{ key }} </td>
    {% endfor %}
{% endfor %}
</tr>

此外,this long answer也可能有所帮助。

答案 1 :(得分:0)

所以,这就是你如何实现这个表:

from collections import OrderedDict


d1 = {1: 'Alex', 2: 'Andrei'}
d2 = {1: 'Cristi', 2: 'Ion'}
d3 = {1: 'Sandu', 2: 'Marica'}

d = dict()

d1 = OrderedDict(sorted(d1.items()))
d2 = OrderedDict(sorted(d2.items()))
d3 = OrderedDict(sorted(d3.items()))

d1 = list(d1.items())
d2 = list(d2.items())
d3 = list(d3.items())

d['team_1'] = d1
d['team_2'] = d2
d['team_3'] = d3

d = OrderedDict(sorted(d.items()))


{% for i in d.items %}
    <tr>
        <td>{{ i.1.0.1 }}</td>
    </tr>
{% endfor %}