django-tables2 linkcolumn несколько элементов в одной ячейке

Я хотел бы добавить несколько «элементов» в одну и ту же ячейку, используя tables.LinkColumn.

Что-то вроде этого:

column_name = tables.LinkColumn('some_url_edit', args=[A('pk')], attrs={'class':'tbl_icon edit'})
column_name += tables.LinkColumn('some_url_del', args=[A('pk')], attrs={'class':'tbl_icon delete'})
column_name += ...

Это вообще возможно? или мне создать собственное табличное представление без django-tables.

Спасибо!


person Mission    schedule 08.06.2011    source источник


Ответы (2)


Здесь у вас есть два варианта: либо использовать TemplateColumn, либо напишите метод render_FOO.

Вот пример использования TemplateColumn (как вы видите, запись добавляется в контекст, который используется для рендеринга шаблона, что позволяет вам получить доступ к pk через record.pk:

TEMPLATE = '''
   <a href="{% url some_url_edit record.pk %}" class="tbl_icon edit">Edit</a>
   <a href="{% url some_url_del record.pk %}" class="tbl_icon delete">Delete</a>
'''

class MyTable(tables.Table):
    column_name = tables.TemplateColumn(TEMPLATE)

Пример использования render_FOO:

from django.utils.safestring import mark_safe
from django.core.urlresolvers import reverse

class MyTable(tables.Table):
    column_name = tables.Column()

    def render_column_name(self, record):
        edit_url = reverse("some_url_edit", args=[record.pk])
        del_url = reverse("some_url_del", args=[record.pk])
        return mark_safe('''<a href="%s" class="tbl_icon edit">Edit</a>
                         <a href="%s" class="tbl_icon delete">Delete</a>'''
                         % (edit_url, del_url))

Как вы можете видеть, подход TemplateColumn, вероятно, немного чище в вашем случае.

person bradley.ayers    schedule 08.06.2011
comment
Я не делал TemplateColumn вещи очень очевидными, они описаны только в Справочнике по API в самом низу. - person bradley.ayers; 08.06.2011

Пример с render foo у меня не работал со столбцом, определенным как tables.Column(). Теперь я использую TemplateColumn с render_FOO.

TEMPLATE = "<text></text>"
column_name = tables.TemplateColumn(TEMPLATE)
person Wasco    schedule 20.09.2019