我构建了一个利用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__
方法中插入一些内容,但我无法将其搞定。
有什么想法吗?
非常感谢
森
答案 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!