Транспонировать таблицу Django в django_tables2 - PullRequest
1 голос
/ 01 августа 2011

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

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

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

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

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

0 голосов
/ 03 февраля 2018

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

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

В пределах 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)

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

0 голосов
/ 12 апреля 2014

Измените функцию 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}
...