我正在尝试创建一个基本上显示有关此记录的信息的视图
|Description| blahblahblah
|Name | blah blah blahs
|Last Edited| someDate
|Owned by | Blah blah blah info
从默认情况下django_tables2呈现表的方式转换而来。有一种简单的方法可以做到这一点,还是我必须编写自己的模板?我发现这样做(理论上)因为有一个自定义模板的好例子,它说我必须“将你的Table子类的实例传递给你自己的模板,然后自己渲染”。我实际上并不知道那是什么意思:(
答案 0 :(得分:2)
您需要编写自己的模板,通过迭代表的属性并编写正确的标记来生成所需的HTML。您可以这样做的一个很好的示例是用于as_html()
函数的模板:https://github.com/bradleyayers/django-tables2/blob/master/django_tables2/templates/django_tables2/table.html
答案 1 :(得分: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}
答案 2 :(得分:0)
我今天为一个项目解决了这个问题,实际上相当简单。
在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)
然后配置表,放入上下文并像往常一样发送到模板。您将拥有一个包含两列的表,显示数据库中一行的所有数据。