是否可以在模板中执行模型方法?
我有一个模型,它有一个名为'has_voted'的方法。它看起来像这样...是否可以在模板中执行模型方法?
def has_voted(self, user):
# code to find out if user is in a recordset, returns a boolean
是否可以在模板中执行此方法?像object.has_vote(user)
?
您只能调用不带参数的方法。所以{{ object.has_voted }}
应该没问题,如果该方法被简单地定义为has_voted(self)
,但正如你已经表明它不会。
将参数传递给方法的最佳方式是定义一个简单的模板过滤器。
@register.filter
def has_voted(obj, user):
return self.has_voted(user)
,并称之为:
{{ object|has_voted:user }}
你会推荐这种方式吗?如果不是为什么? – dotty 2011-06-14 13:49:31
是的,我不明白为什么不。正如TokenMacGuy所说,演示文稿和业务逻辑之间有区别,但我不同意他的观点,即模型对于演示文稿没有任何用处,IMO在这种情况下就是一个很好的例子。 – 2011-06-14 14:11:47
可以,但前提是没有参数。像这样:
def has_voted(self):
{% if object.has_voted %}
如果你的方法有参数,你不能 - 这是Django的宗教信仰。
即使你可以,你*不应该*。这些模型在演示方面应该没有什么有趣的地方,演示文稿也不应该知道它所呈现的基本模型。如果你发现你需要一些跨越表现和业务逻辑的功能,它就属于*控制器*(在django中是视图功能)。 – SingleNegationElimination 2011-06-14 13:51:58