Django模板';如果';条件
我想做一些像Django模板';如果';条件,django,django-templates,Django,Django Templates,我想做一些像 {% if "sumit" in feed.like.person.all %} 但这给了我模板语法错误。在Djagno我怎么做 (基本上,我想检查feed.like.person.all中是否存在“sumit”) 这是我的相关模型 class Feed(models.Model): name = models.CharField(max_length=120) text = models.CharField(max_length=1200) timest
{% if "sumit" in feed.like.person.all %}
但这给了我模板语法错误。在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)
我认为您打算检查以下内容:
# check if current user likes a feed
{% if request.user in feed.like.person.all %}
但是,如果您正在检查多个提要,那么此方法将变得效率低下。对于多个提要,更好的方法是使用 通过查询每个提要来检查用户是否喜欢模板中的提要的方法效率非常低
我建议在获取查询集时使用注释每个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()))
这样,您将只在一个查询中获取所有内容。然后,在模板中,您只需检查提要上的is_like
:
{% if feed.is_liked %}You like this.{% endif %}
我还没有真正执行过这个查询,但查看文档,它可能是类似的。这在django模板中是不可能直接执行的。它们不是为这个目的而建造的。您是否只在模板中获得一个提要
?这是您正在检查的唯一条件还是有多个类似条件?@AKS模板中有多个提要。我试图实现的是显示提要,在该提要下面,如果我已经喜欢该提要,我想显示,您喜欢此
。请检查我的答案以获得优化的方法。{%if-request.user in-feed.like.person.all%}
不起作用。网页中有多个feed,我如何发送网页中每个feed的帖子,无论我是否喜欢?是'django.template.context\u processors.request',
,在你的context\u processors设置中。糟糕,我本来不喜欢django管理员的帖子。现在可以工作了<代码>{%如果feed.like.person.all%}
中的用户正在工作。非常感谢。虽然它可以工作,但对模板中的所有提要进行检查是一种非常低效的方法。更好的方法是在视图中为每个提要本身添加注释,说明当前用户是否喜欢它。@AKS是的,您是对的。对于检查多个提要,这将变得效率低下。起初我认为这将是一个单一的饲料。也将添加注释方法来处理多个提要。