Skip to main content
 首页 » 编程设计

python之重新渲染 django-tables2 列标题

2024年08月29日3152php

我构建了一个网站,利用 django-tables2 来呈现表格数据。我遇到了一个我无法解决的问题。

在某些表中,我使用从数据库中提取的值构建了一个列 verbose_name:

setting = Setting.objects.get(site=Site.objects.get_current()) 
vol_unit = setting.volume_unit 
base_vol_unit = Unit.objects.get(id=settings.BASE_VOLUME_UNIT) 
total_vol = tables.Column( 
    verbose_name="Total Volume (" + vol_unit.symbol + ")") 

在用户更改其默认体积单位设置之前,这种方法效果很好。在下一次服务器重启之前,它不会反射(reflect)在表中。

我想我可以将一些东西插入到表的 __init__ 方法中,但我还没能把它弄清楚。

有什么想法吗?

非常感谢

内森

请您参考如下方法:

回答有点晚,但迟到总比不到好:)

这有点棘手,但是当您明白这一点时并不难 - 实际上您不需要从 django-tables2 更改或继承任何东西,python 为您提供了所有您需要的工具需要:)

所以,问题在于,如果您将一个字符串作为详细名称传递,它只会被评估一次以找出其值,然后它只是一个静态字符串。您真正需要做的是传递一些可以充当字符串但每次都会重新计算其值的东西。

嗯,这只是一个普通的类,它有一个 __unicode__ 方法,例如:

import datetime 
class Foo: 
    def __unicode__(self): 
        return unicode(datetime.datetime.now()) 

然后你可以在你的表中做类似的事情:

class MyTable(tables.Table): 
    koko = tables.Column(verbose_name=unicode(datetime.datetime.now()) ) 
    koko2 = tables.Column(verbose_name=Foo()) 

koko 列的标题将始终具有相同的值,但每次刷新页面时 koko2 的标题都会更改!

python !