1

我正在尝试制作一个基本上显示有关这样的记录的信息的视图

|Description| blahblahblah
|Name       | blah blah blahs
|Last Edited| someDate
|Owned by   | Blah blah blah info

这是从 django_tables2 默认呈现表的方式转换而来的。有没有一种简单的方法可以做到这一点,还是我必须编写自己的模板?我发现这样做(理论上)因为有一个很好的自定义模板示例,它说我必须“将您的 Table 子类的实例传递到您自己的模板中,并自己渲染它”。我实际上并不知道那是什么意思:(

4

3 回答 3

2

您需要编写自己的模板,通过迭代表的属性并编写正确的标签来生成所需的 HTML。as_html()用于该功能的模板是一个很好的例子: https ://github.com/bradleyayers/django-tables2/blob/master/django_tables2/templates/django_tables2/table.html

于 2011-08-30T04:45:02.570 回答
1

我今天为一个项目解决了这个问题,它实际上相当简单。

定义一个新表

tables.py中,定义一个包含两列的表。让我们调用第一列name和第二列value

class RowTable(tables.Table):
    name = tables.Column()
    value = tables.Column()

    class Meta:
        template = 'django_tables2/bootstrap.html'
        attrs = {'class': 'table table-striped table-responsive'}  

在您的视图中,将数据绑定到表

然后,在您看来,您需要从数据库中提取实例(行),并使用字典填充表:

row_instance = Model.objects.get(foo=foo.id)
#Extract column data from instance be sure it is string!
height = str(row_instance.height)
weight = str(row_instance.weight)
nationality = row_instance.nationality

#Create dictionary of data in form table will recognize
row_data =[ {'name': 'height', 'value': height},
            {'name': 'weight', 'value': weight},
            {'name': 'nationality', 'value': nationality} ]

#Bind to table and configure
table = RowTable(row_data)

然后配置表,放入上下文并像往常一样发送到模板。您将有一个包含两列的表,其中显示了数据库行中的所有数据。

于 2018-02-03T15:39:28.010 回答
0

将 /lib/python2.7/site-packages/django/contrib/admin/templatetags/admin_list.py 中的 result_list(cl) 函数更改为:

def result_list(cl):
 """
 Displays the headers and data list together
 """
 headers = list(result_headers(cl))
 num_sorted_fields = 0
 for h in headers:
     if h['sortable'] and h['sorted']:
         num_sorted_fields += 1
 result1 = list(results(cl))
 result2 = map(list, zip(*result1))
 return {'cl': cl,
         'result_hidden_fields': list(result_hidden_fields(cl)),
         'result_headers': headers,
         'num_sorted_fields': num_sorted_fields,
         'results': result2}
于 2014-04-12T19:27:35.773 回答