3

我在django-tables2表中有一個TemplateColumn,我想使用自定義模板過濾器(名爲int_to_time)來轉換數據。當我使用內置過濾器時,它工作正常。Django-tables2 - 如何在TemplateColumn中使用自定義過濾器

我到目前爲止所做的工作是將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 %} 

我可以證實,我的標籤庫正在加載,因爲如果我寫標籤庫的名稱錯誤,那麼我會得到一個模板庫找不到錯誤。

請幫忙!

回答

7

簡單的解決方案

​​外部呈現列的模板。您在模板中加載的任何自定義過濾器或標籤都將無法使用。

當您定義TemplateColumn時,您應該可以加載自定義過濾器。喜歡的東西:

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

替代(在評論布拉德利建議)

而不是在類中定義你的表使用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

+1

這是一個低效率(雖然不夠關心),但肯定會工作。另一種方法是使用'render_FOO'方法,並將過濾器作爲普通的Python函數導入,並將其應用於'record.name'。 –

相關問題