Рендеринг заголовков столбцов django-tables2

Я создал веб-сайт, который использует 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 + ")")

Это хорошо работает до тех пор, пока пользователь не изменит настройку единицы объема по умолчанию. Не отображается в таблице до следующего перезапуска сервера.

Я предполагаю, что я могу что-то вставить в метод __init__ таблицы, но я не смог это выкинуть.

Любые идеи?

Большое спасибо

Натан


person Nathan Crabbe    schedule 07.04.2013    source источник


Ответы (1)


Немного запоздалый ответ, но лучше поздно, чем никогда :)

Это немного сложно, однако это не сложно, когда вы понимаете идею - вам на самом деле не нужно изменять или наследовать что-либо от 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 будет меняться каждый раз, когда вы обновляете страницу!

Питон ФТВ!

person Serafeim    schedule 27.04.2013
comment
Большое спасибо! Я не думал подходить к этому с такой стороны. Тоже понятно объяснил. - person Nathan Crabbe; 30.04.2013