如何使用django-tables2从dict创建表

时间:2013-02-13 09:29:42

标签: django django-views django-tables2

我有一个dict列表,如下所示:

 [set([u'meal', '0:08:35.882945']),
  set([0, u'personal']),
  set([0, u'sleep']),
  set([0, u'transport']),
  set([0, u'work'])]

我从:

[u'meal',u'personal', u'sleep', u'transport', u'work']
['0:08:35.882945', 0, 0, 0, 0]

使用此命令:

nob =  [{m,n} for m,n in zip(cats,tot3)]

如何将其转换为django-tables2表格?

我试过了:

# tables.py
class Small_table (tables.Table):
    category = tables.Column(verbose_name="category")
    class Meta:
        attrs = {"class": "paleblue"}

# views.py
nt = Small_table(nob)
RequestConfig(request).configure(nt)

但是这个表有一列破折号而不是我的数据,我应该改变什么?

2 个答案:

答案 0 :(得分:2)

这就是我最终做的事情:

在我的tables.py中:

class Small_table (tables.Table):
    name = tables.Column(verbose_name="category",order_by="name")
    tot  = tables.Column(orderable=False)
    class Meta:
        attrs = {"class": "paleblue"}

在我看来

from .tables import Small_table
from django_tables2   import RequestConfig
nob =  [{"name":m,"tot":n} for m,n in zip(cats,tot3)]
nt = Small_table(nob)
RequestConfig(request).configure(nt)
return render(request, "job/job_home.html", { "small":nt })

并在模板中:

{% load render_table from django_tables2 %}
 <link rel="stylesheet" href="{{ STATIC_URL }}django_tables2/themes/paleblue
{% render_table small %}

答案 1 :(得分:1)

我不熟悉这个django-tables应用程序,但如果你的目标只是在表格中显示数据,我会这样做:

  1. 您的数据结构太复杂了。只需创建一个元组列表并将其作为模板上下文返回。

    >>> a = [u'meal', u'personal', u'sleep', u'transport', u'work']
    >>> b =  ['0:08:35.882945', 0, 0, 0, 0]
    >>> nob = zip(a, b)
    >>> nob 
    [(u'meal', '0:08:35.882945'),
     (u'personal', 0),
     (u'sleep', 0),
     (u'transport', 0),
     (u'work', 0)]
    
  2. 在您的模板中,您可以执行以下操作:

    <table> 
    {% for i, j in nob %}
        <tr>
            <td>{{ i }}</td>
            <td>{{ j }}</td>
        </tr>
    {% endfor %}
    </table>
    
  3. 这会在表格中为nob中的每个条目创建一个包含两个单元格的行。现在你可能会看到为什么集合列表在这里不是一个好主意。集合不保留元素的顺序,即{{ i }}有时可以从列表a中获取,有时也可以从列表b获取,而您希望始终从列表中获取{{ i }}始终从列表a中获取{{ j }}b