如何过滤Django的boolean字段并在模板中显示结果



全新的Python/Django和已经撞了墙,试图找出如何只显示标记为True的帖子在同一模板的某些部分。

例如。我有一个博客,用户可以使帖子,但我想要标记为science_post的帖子,使用DjangoBooleanField,从其余的博客文章分开显示。

这是我的Post模型:

class Post(models.Model):
title = models.CharField(max_length=31)
content = models.TextField()
thumbnail = models.ImageField()
picture_description = models.CharField(max_length=100, default=True)
displayed_author = models.CharField(max_length=25, default=True)
shortquote = models.TextField()
reference_title = models.ManyToManyField(References)
publish_date = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
slug = models.SlugField()
science_post = models.BooleanField(default=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("detail", kwargs={
'slug': self.slug
})
def get_love_url(self):
return reverse("love", kwargs={
'slug': self.slug
})
@property
def comments(self):
return self.comment_set.all()
@property
def get_comment_count(self):
return self.comment_set.all().count()
@property
def get_view_count(self):
return self.postview_set.all().count()
@property
def get_love_count(self):
return self.love_set.all().count()

我的想法是简单地过滤掉模板中标记为science_post的帖子,使用

一行的东西
{% if science_post %}
SHOW SCIENCE POST CONTENT HERE
{% endif %}

…但是这没有返回任何结果。任何帮助或点在正确的方向上,这将是伟大的。如果需要任何额外的信息,请告诉我。谢谢。

为了实现两个独立的帖子显示,你应该在后端使用两个单独的查询,而不是在前端使用if语句将它们分开。

尝试传递两个queryset到您的模板,使用两个单独的查询,您可以过滤不同类型的帖子:

...
science = Post.objects.filter(science_post=True)
non_science = Post.objects.filter(science_post=False)
...

然后在你的模板中分别渲染它们:

...
{% for post in science_post %}
SHOW SCIENCE POST CONTENT HERE
{% endfor %}
...
{% for post in non_science %}
SHOW NON-SCIENCE POST CONTENT HERE
{% endfor %}
...

最新更新