2012-02-04 59 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的访问,并返回反向超链接和值...

反正适用于专门