【问题标题】:Django template tableDjango模板表
【发布时间】:2017-04-24 12:12:19
【问题描述】:

我有 3 个字典 data['d1']、data['d2'] 和 data['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())

【问题讨论】:

  • 当前显示的是什么(当前表格布局)?
  • 您能展示一下您是如何在视图中填充 d1、d2 和 d3 的吗?
  • 完成了,自己去找
  • @nik_m 你能谈谈吗? :)

标签: django django-templates


【解决方案1】:

您希望将 dict 的所有键打印在 column 中,而将 dict 的所有键打印在 row

您可以将 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 也可能有所帮助。

【讨论】:

  • 你试过压缩字典吗?
  • 嗯..不,我没有
  • Zip 不适用于字典。
  • @AbijithMg dict.items 返回一个列表,这样可以提供帮助吗?类似:for (k1, v1), (k2, v2), (k3,v3) in zip(d1.items(), d2.items(), d3.items()): &lt;tr&gt;&lt;td&gt;{{k1}}&lt;/td&gt;&lt;td&gt;{{k2}}&lt;/td&gt;.......&lt;/tr&gt;(我认为类似)
  • @AbhijitMg 啊,是的,你是对的。 @NitaAlexandru 另一个解决方案是在视图中将列表 d = [d1,d2,d3] 中的字典组合起来,然后在模板中迭代 d 。我看到了一个很好的详细示例here。更新答案
【解决方案2】:

所以,这就是您可以实现该表的方法:

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 %}

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2012-01-09
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多