2012-02-04 56 views
2

假設我有以下表類:Django的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)) 

是否有可能在渲染的方法來訪問列「ID」的值,這樣我就可以建立一個通向id的鏈接,但顯示取決於'description'字段的文本?

在此先感謝!

回答

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

太好了!我不知道有一個存儲整個記錄的特殊對象,可以通過將其作爲參數傳遞來訪問它。順便說一句,你的第二個猜測是正確的,它是一個字典,它必須由記錄['id']訪問。非常感謝! – noplacetoh1de 2012-02-04 13:25:34

+2

「記錄」是您的數據中的任何類型的對象。如果你使用'dict'數組,那麼'record'將是一個'dict'。 – 2012-02-05 18:25:09

1

@達爾布謝謝你,這個選項完美的作品。不過,我想知道是否有什麼辦法做到這一點使用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的訪問,並返回反向超鏈接和值...

反正適用於專門