#django
#django
Вопрос:
У меня проблема, когда у меня есть что-то вроде этого:
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 не позволяет передавать параметры методу. Есть ли способ для меня выполнить это аккуратно?
Комментарии:
1. Рассмотрите возможность переключения механизма шаблонов на Jinja2. Тогда вы можете просто сделать
{% if thing.can_vote(request.user) %}
.
Ответ №1:
Вы можете использовать пользовательский тег шаблона или фильтр. Если фильтр:
@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 %}