django-tables2 linkcolumn multiple items in the same cell
Asked Answered
C

2

5

I'd like to add multiple 'items' to the same cell using tables.LinkColumn.

Something like this:

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 += ...

Is this even possible? or should I create my own table view, without django-tables.

Thanks!

Crosscountry answered 8/6, 2011 at 6:52 Comment(0)
W
11

You have two options here, either use a TemplateColumn, or write a render_FOO method.

Here is an example using the TemplateColumn (as you can see the record is added to the context that is used to render the template, thus allowing you to access the pk via 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)

Example using the 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))

As you can see the TemplateColumn approach is probably a little cleaner in your case.

Wilden answered 8/6, 2011 at 7:10 Comment(1)
I didn't make the TemplateColumn stuff very obvious, it's only covered in the API Reference at the very bottom.Wilden
E
-1

Example with render foo didn't work for me with column defined as tables.Column(). Now i use TemplateColumn with render_FOO.

TEMPLATE = "<text></text>"
column_name = tables.TemplateColumn(TEMPLATE)
Explode answered 20/9, 2019 at 5:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.