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

Posted

技术标签:

【中文标题】Django-tables2 - 如何在 TemplateColumn 中使用自定义过滤器【英文标题】:Django-tables2 - how to use a custom filter in a TemplateColumn 【发布时间】:2012-06-03 02:49:36 【问题描述】:

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

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

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

/details_show/2012/3/13/2 处的 TemplateSyntaxError 过滤器无效:“int_to_time”

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

% for column, cell in row.items %

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

请帮忙!

【问题讨论】:

【参考方案1】:

最简单的解决方案

TemplateColumn 在模板外部呈现列。您在模板中加载的任何自定义过滤器或标签都将不可用。

您应该能够在定义TemplateColumn 时加载自定义过滤器。比如:

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

替代方案(由 Bradley 在 cmets 中建议)

而不是在定义表的类中使用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。

【讨论】:

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

以上是关于Django-tables2 - 如何在 TemplateColumn 中使用自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 view.py 中 django-tables2 表的列标题?

django-tables2 每行添加按钮

css django-tables2(https://github.com/bradleyayers/django-tables2)的bootstrap模板,目前依赖于django-bootstrap

oracle如何查看temp表空间建立在哪个文件上在

如何在 SQL 中从临时表 (#temp1) 生成脚本

如何使用临时变量交换两个以上的变量