2012-08-06 134 views
0

如何創建一個簡單的過濾器,這樣從字典中提取值:Django的:自定義模板過濾

PHANTOM_TYPE_CHOICES = (
    (1, 'Type 1'), 
    (2, 'Type 2'), 
) 

與Django的1.4工程:

我已經試過這樣:

from django.template import Library  
register = Library() 
    ... 

def get(d, key): 
    return d.get(key, '') 

register.filter(key) 

..但它不起作用! (它給我以下錯誤:'功能'對象沒有屬性'過濾器')

任何想法?

+0

你的字典('PHANTOM_TYPE_CHOICES')不是字典,而是一元組。因此沒有關鍵。你想用你的過濾器做什麼? – arie 2012-08-06 17:23:22

+0

我試圖在模板中使用相應的索引打印PHANTOM_TYPE_CHOICES的任何值..因爲在我的數據庫中,我只記住了索引而不是描述。 – Kreshnik 2012-08-06 17:46:29

+1

如果你需要一個像訪問你的選擇元組的字典,你應該先將它轉換爲:'dict(PHANTOM_TYPE_CHOICE)'。現在你應該能夠通過索引獲取你的值。但是,如果您只需要某些實例的值['get_FOO_choices()'](https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display)足夠。 – arie 2012-08-07 07:03:32

回答

1

你試過:

register.filter('key', get) 
+0

是的,並且不起作用:/ – Kreshnik 2012-08-06 15:18:23

+0

什麼是errormessage? – 2012-08-07 06:57:48

+0

「功能」對象有沒有屬性「過濾器」 .. – Kreshnik 2012-08-07 08:34:03

1

在你的代碼示例您要註冊指向方法「重點」,然而該方法的名字是一個過濾器「搞定」

更換

register.filter(key) 

register.filter(get) 

或使用裝飾

@register.filter() 
def get(d, key): 
    return dict(d).get(key, '') 
+0

這是奇怪,但它不斷給我的錯誤: ...「功能」對象有沒有屬性「過濾器」 .seems是「過濾器」的方法是不一個有效的方法! – Kreshnik 2012-08-06 15:59:56

+0

您是否嘗試將方法重命名爲get()以外的其他方法?也許這是造成一些奇怪的行爲。 – Mikael 2012-08-07 07:09:28

+0

是的,也許會出現django故障或配置錯誤,我想! – Kreshnik 2012-08-07 11:03:34

相關問題