2011-06-14 39 views
0

我有一個模型,它有一個名爲'has_voted'的方法。它看起來像這樣...是否可以在模板中執行模型方法?

def has_voted(self, user): 
    # code to find out if user is in a recordset, returns a boolean 

是否可以在模板中執行此方法?像object.has_vote(user)

+0

即使你可以,你*不應該*。這些模型在演示方面應該沒有什麼有趣的地方,演示文稿也不應該知道它所呈現的基本模型。如果你發現你需要一些跨越表現和業務邏輯的功能,它就屬於*控制器*(在django中是視圖功能)。 – SingleNegationElimination 2011-06-14 13:51:58

回答

2

您只能調用不帶參數的方法。所以{{ object.has_voted }}應該沒問題,如果該方法被簡單地定義爲has_voted(self),但正如你已經表明它不會。

將參數傳遞給方法的最佳方式是定義一個簡單的模板過濾器。

@register.filter 
def has_voted(obj, user): 
    return self.has_voted(user) 

,並稱之爲:

{{ object|has_voted:user }} 
+0

你會推薦這種方式嗎?如果不是爲什麼? – dotty 2011-06-14 13:49:31

+0

是的,我不明白爲什麼不。正如TokenMacGuy所說,演示文稿和業務邏輯之間有區別,但我不同意他的觀點,即模型對於演示文稿沒有任何用處,IMO在這種情況下就是一個很好的例子。 – 2011-06-14 14:11:47

相關問題