Транспонировать таблицу Django в django_tables2

Я пытаюсь создать представление, которое по существу показывает информацию о записи, подобной этой.

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

который перенесен из способа, которым django_tables2 отображает таблицы по умолчанию. Есть ли простой способ сделать это или мне придется кодировать свой собственный шаблон? Я делаю это (теоретически), поскольку есть хороший пример пользовательского шаблона, в котором говорится, что я должен «передать экземпляр вашего подкласса таблицы в ваш собственный шаблон и отобразить его самостоятельно». Хотя я не знаю, что имелось в виду :(


person jlozier    schedule 01.08.2011    source источник


Ответы (3)


Вам нужно будет написать свой собственный шаблон, который создает желаемый HTML, перебирая атрибуты таблицы и записывая правильные теги. Хорошим примером того, как это можно сделать, является шаблон, используемый для функции as_html(): https://github.com/bradleyayers/django-tables2/blob/master/django_tables2/templates/django_tables2/table.html.

person bradley.ayers    schedule 30.08.2011

Я решил это для проекта сегодня, на самом деле это было довольно просто.

Определить новую таблицу

Внутри 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)

Затем настройте таблицу, поместите в контекст и отправьте в шаблон, как обычно. У вас будет таблица с двумя столбцами, показывающая все данные из строки вашей базы данных.

person cort    schedule 03.02.2018

Измените функцию result_list(cl) в /lib/python2.7/site-packages/django/contrib/admin/templatetags/admin_list.py на это:

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}
person maQbex    schedule 12.04.2014