2015-11-26 159 views
0

的論點,我創建在Django模板的自定義過濾器,不過在Django在沒有經過一定的制約。它只允許一個或兩個參數用於自定義過濾器功能Read more。而且,我想兩個參數傳遞給我的自定義過濾器一個是string和第二個是模型類的object。但不能夠成功地完成這一點。不能通過模型​​的對象在Django自定義模板過濾器

的index.html

{% load has_permission_filter %} 
{% for u in users %} 
<span class={{ user|has_location_perm:('user.view_user', u)}}>View</span> 
{% endfor %} 

在上述模板user是當前登錄的用戶和usersUser模型類的實例的列表。

has_permission_filter.py

def has_location_perm(user, args): 
    perm_str, obj = args[0], args[1] 
    // business logic 
    if user.has_perm(perm_str) and business_logic_check(perm_str, obj): 
     return 'allow' 
    else: 
     return 'not-allow' 

所以,我想一個某種形式的解決方案,它可以幫助我在過濾函數傳遞object從Django的模板。

+2

爲什麼你需要在'user'傳遞,你不只是檢查,如果用戶'u'擁有的權限? – Sayse

+1

對我來說你的html看起來有點混亂。 'user'來自哪裏(在你的span標籤中)? – cezar

+0

@cezar我有編輯問題,請參閱。 –

回答

4

不能使用多個參數用的過濾器。儘管你可以用simple tag

+0

如果參數是一個模板變量,簡單的標籤函數傳遞變量,不是變量本身的當前值。所以我如何在我的函數中使用變量'u'屬性。 –

+0

簡單的標籤將正常工作。文檔中的這個句子意味着標籤將被傳遞給用戶'u',而不是字符串''u''。簡單標籤負責從模板上下文中獲取''u''的值。 – Alasdair

+0

@桑德-VAN-Leeuwen的感謝兄弟,這個解決方案確實有效。 –