如何过滤和统计 DJANGO 模板中的对象?
Posted
技术标签:
【中文标题】如何过滤和统计 DJANGO 模板中的对象?【英文标题】:How can I filter and count objects in DJANGO template? 【发布时间】:2017-04-15 07:53:51 【问题描述】:你好我只是想问这个,因为我是 django 的新手,我的麻烦是我想计算有多少 cmets 有一个帖子并将其放入 html 模板。 但问题是我使用 for 收集数据库中的所有事件,但我只想显示具有“for”显示的每个事件的 cmets 的计数。 这是我的模型、视图和模板。 非常感谢。
模型
class Event(TimeStampModel):
name = models.CharField(max_length=200, unique=True)
slug = models.SlugField(editable=False)
summary = models.TextField(max_length=255)
content = models.TextField()
category = models.ForeignKey(Category)
place = models.CharField(max_length=50)
start = models.DateTimeField()
finish = models.DateTimeField()
image = models.ImageField(upload_to = 'eventos')
is_free = models.BooleanField(default=True)
amount = models.DecimalField(max_digits=6, decimal_places=0, default=0)
views = models.PositiveIntegerField(default=0)
organizer = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.name)
super(Event, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
class Comments(TimeStampModel):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
event = models.ForeignKey(Event)
content = models.TextField()
def __unicode__(self):
return "%s %s" % (self.user.username, self.event.name)
查看
class IndexView(TemplateView):
template_name = 'eventos/index.html'
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['events'] = Event.objects.all().order_by('-created')[:6]
context['categories'] = Category.objects.all()
context['comments'] = Comments.objects.all()
return context
HTML 模板
% for event in events %
<li class="span4 ">
<div class="thumbnail thumbnail-1">
<h3 class="titulo-fix" > event.name </h3>
<img class="center-cropped" src=" event.image.url " >
<section>
<a href="#"><h3> event.category </h3></a>
<div class="meta">
<time datetime="2012-11-09" class="date-1"><i class="icon-calendar"></i> event.start </time>
<div class="name-author"><i class="icon-user"></i> <a href="#"> event.organizer </a></div>
<a href="#" class="comments"><i class="icon-comment"></i> comments</a>
</div>
<div class="clear"></div>
<p> event.place </p>
<a href="#" class="btn btn-1">Leer mas..</a>
</section>
</div>
</li>
% endfor %
我想在 html 中显示 cmets.. 的那部分显示它,当然带有标签,但我只是不知道哪个标签或如何做。
【问题讨论】:
【参考方案1】:您可以在模型上创建一个帮助方法,它可以帮助您显示 cmets 的数量。
类似这样的:
class Event(TimeStampModel):
...
def comments_count(self):
#Your filter criteria can go here.
return self.comments_set.count()
在 cmets 中:
event.comments_count
More documentation on the reverse lookups can be found here
如果你不过滤,就像@MadWombat 提到的那样,你可以这样做
event.comments_set.count
【讨论】:
他不能用 event.comments_set.count
吗?
肯定的,但是OP也提到了过滤的能力,但没有指定过滤条件,所以首选这种方法。 - 无论如何编辑答案.. 谢谢
@MadWombat 这简直太棒了!天哪,非常感谢你..顺便说一句,你给我看的方法,更安全吗?非常感谢你
你能告诉我它来自那个“_set”吗?因为我没有在任何地方定义它。非常感谢
@MadWombat 非常感谢你,正如我所说,我是 django 的新手,我正在学习寻找问题的答案,非常感谢你!以上是关于如何过滤和统计 DJANGO 模板中的对象?的主要内容,如果未能解决你的问题,请参考以下文章