Django-tables2 - 如何在TemplateColumn中使用自定义过滤器

时间:2012-05-28 19:39:59

标签: django django-templates django-template-filters django-tables2

我在django-tables2表中有一个TemplateColumn,我想使用自定义模板过滤器(名为int_to_time)来转换数据。当我使用内置过滤器时,它可以正常工作。

我到目前为止所做的是将django-tables2中的templates \ django_tables2 \ table.html复制到我的项目中,并将我的标记库包含到table.html中。

但是,当我尝试渲染视图时,出现以下错误:

TemplateSyntaxError at /details_show/2012/3/13/2
Invalid filter: 'int_to_time'

错误似乎在table.html的第28行

{% for column, cell in row.items %}

我可以确认我的标记库正在加载,因为如果我写错了标记库的名称,那么我将得到一个找不到模板库的错误。

请帮忙!

1 个答案:

答案 0 :(得分:8)

最简单的解决方案

TemplateColumn将列外部呈现给模板。您在模板中加载的所有自定义过滤器或标记都将无法使用。

定义TemplateColumn时,您应该可以加载自定义过滤器。类似的东西:

name1 = tables.TemplateColumn('{% load my_filters %}{{ record.name|int_to_time }}')

替代(Bradley在评论中提出)

而不是在定义表的类中使用TemplateColumn。使用Column,但使用格式定义方法render_columnname()。类似的东西:

from myfilters import int_to_time

class MyTable(tables.Table):
    time = tables.Column()

    def render_time(self, value):
        return int_to_time(value)

有关详细信息,请参阅Table.render_FOO() Methods