重新渲染django-tables2列标题

时间:2013-04-07 05:36:19

标签: python django django-tables2

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

在某些表中,我使用从db:

中提取的值来构造列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 + ")")

这很有效,直到用户更改其默认音量单位设置。在下次服务器重新启动之前,它不会反映在表中。

我想我可以在表__init__方法中插入一些内容,但我无法将其搞定。

有什么想法吗?

非常感谢

1 个答案:

答案 0 :(得分:3)

迟到的答案,但迟到总比没有好。)

这有点棘手,但是当你明白它并不困难 - 你实际上不需要从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 FTW!