Django模板'IF'条件

时间:2016-05-21 07:40:00

标签: django django-templates

我想做点什么

{% if "sumit" in feed.like.person.all %}

但这给了我TemplateSyntaxError。我怎么能在Djagno做到这一点?

(基本上,我想检查feed.like.person.all中是否存在'sumit')

以下是我的相关模型。

class Feed(models.Model):
    name = models.CharField(max_length=120)
    text = models.CharField(max_length=1200)
    timestamp = models.DateTimeField(auto_now=True, auto_now_add=False)
    updated = models.DateTimeField(auto_now=False, auto_now_add=True)


class Like(models.Model):
    feed = models.OneToOneField(Feed)
    counter = models.PositiveIntegerField()
    person = models.ManyToManyField(settings.AUTH_USER_MODEL, null=True, blank=True)

2 个答案:

答案 0 :(得分:2)

我认为您打算检查以下内容:

# check if current user likes a feed
{% if request.user in feed.like.person.all %}

但是,如果您要检查多个Feed,则此方法效率低下。对于多个Feed,更好的方法是使用Annotations中提到的@AKS

答案 1 :(得分:1)

通过查询每个Feed来检查用户是否喜欢模板中的Feed的方法是非常低效的。

我建议在获取查询集时使用Conditional Expressions注释每个feed

from django.db.models import BooleanField, Case, When, Value

feeds = Feed.objects.all().annotate(
             is_liked=Case(
                When(like__person=request.user, then=Value(True)),
                default=Value(False),
                output_field=BooleanField()))

这样,您只能在一个查询中获取所有内容。然后,在模板中,您只需检查Feed上的is_liked

{% if feed.is_liked %}You like this.{% endif %}

我还没有真正执行过此查询,但查看文档会有类似的内容。