Я хотел бы запросить модель, основанную на текущем пользователе, в шаблоне

#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 %}