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

Ser*_*eim 3 django django-templates django-template-filters django-tables2

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

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

但是,当我尝试渲染我的视图时,我收到以下错误:

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

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

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

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

请帮忙 !

Dam*_*ers 8

最简单的解决方案

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

您应该能够在定义时加载自定义过滤器TemplateColumn.就像是:

name1 = tables.TemplateColumn('{% load my_filters %}{{ record.name|int_to_time }}')
Run Code Online (Sandbox Code Playgroud)

替代方案(布拉德利在评论中提出)

而不是TemplateColumn在定义表的类中使用.使用a 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)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Table.render_FOO()方法.

  • 这有点低效(虽然不够关心),但肯定会奏效。另一种方法是使用 `render_FOO` 方法,并将过滤器作为普通 Python 函数导入并将其应用于 `record.name`。 (2认同)