2012-02-04 5 views
2

Давайте предположим, что у меня есть следующий класс таблицы:Джанго-tables2 - доступ к значениям других столбцов в классе таблицы

class TestTable(tables.Table): 
    id = tables.Column() 
    description = tables.Column() 

    def render_description(self, value): 
     return mark_safe('''<a href=%s>%s</a>''' % (???, value)) 

Можно ли получить доступ к значению столбца «идентификатор» в методе визуализации, так что я могу создать ссылку, которая ведет к идентификатору, но показывает текст, который зависит от поля описания?

Заранее благодарен!

ответ

6

С первого взгляда на документы для render_FOO это выглядит, как вы можете просто сделать:

class TestTable(tables.Table): 
    id = tables.Column() 
    description = tables.Column() 

    def render_description(self, value, record): 
     return mark_safe('''<a href=%s>%s</a>''' % (record.id, value) 

Не уверен в точной форме записи строки, так что может быть record['id'], ссылку на документы должен помочь с разведкой ...

+0

Great! Я не знал, что есть специальный объект, который хранит всю запись, и к нему можно получить доступ, передав его как параметр. Кстати, ваше второе предположение было правильным, это словарь, так что к нему должен быть доступен запись ['id']. Большое спасибо! – noplacetoh1de

+2

'record' - это когда-либо тип ваших объектов в ваших данных. Если вы используете массив 'dict', то' record' будет 'dict'. –

1

@Darb Спасибо, этот вариант работает отлично. Однако мне было интересно, если есть способ сделать это с помощью accesors вместо взлома текстового столбца для вывода HTML ...

В моем случае я использую

# tables.py 
from django.core.urlresolvers import reverse 
from django.utils.safestring import mark_safe 
#... 

class FieldTable(tables.Table): 
allows__count = tables.LinkColumn(viewname=None, attrs={'td': {'class': 'leftA'}}, 
            verbose_name='No. of Allowed values') 

    def __init__(self, *args, **kwargs): 
    super(FieldTable, self).__init__(*args, **kwargs) 

    def render_allows__count(self, value, record): 
    if value!=0: 
     a = reverse(viewname='dict:field_detail', 
         kwargs= 
         {'field_slug': record.slug, 
         'extract_slug': record.extract.slug, 
         'system_slug': record.extract.system.slug}) 
     return mark_safe('<a href={}>{}</a>'.format(a, value)) 

Однако я хотел бы заменить mark_safe , за то, что называет аксессор allows__count и возвращает обратную гиперссылку и значение ...

Так или иначе работает ноу

Смежные вопросы