2011-10-21 39 views
1

我有一個問題,我有這樣的事情:我想根據當前用戶查詢模式,模板

class Thing(models.Model): 
    def can_vote(self, user): 
     if self.vote_set.filter(user=user).count() < 2: 
      return True 
     # (A pile of other conditions) 

class SomeUser(models.Model): 
    pass 

class Vote(models.Model): 
    user = models.ForeignKey(SomeUser) 
    things = models.ForeignKey(Thing) 

,我想這樣做的模板:

{% if thing.can_vote %} 
    {# Review stuff #} 
{% endif %} 

根據當前用戶是否已經投票小於的次數或量不大。這個問題似乎是Django不允許你傳遞參數給方法。有沒有辦法讓我完成這個整齊的?

+0

考慮改用模板引擎的Jinja2。然後,你可以簡單地做'{%如果thing.can_vote(request.user)%}'。 –

回答

4

您可以使用custom template tag or filter。如果過濾器:

@register.filter 
def can_vote_on(user, thing): 
    if thing.vote_set.filter(user=user).count() < 2: 
     return True 
    # (A pile of other conditions) 

模板:

{% if user|can_vote_on:thing %} 
    {# Review stuff #} 
{% endif %} 
+0

讀取真的很好,我喜歡它。 –