2011-06-14 150 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

相关问题