django - Django在页面上显示多个类别
问题描述
我有这个 model.py 文件:
class Category(models.Model):
title = models.CharField(max_length=255, verbose_name="Title")
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
return self.title
class Video(models.Model):
title = models.CharField(max_length=128)
description = models.TextField(default='')
thumbnail = models.ImageField(default='default_thumbnail.png', upload_to='thumbnails')
date_posted = models.DateTimeField(default=timezone.now)
category = models.ForeignKey(
Category,
on_delete=models.SET_DEFAULT,
#null=True,
default=1,
verbose_name="Category"
)
def __str__(self):
return self.title
每个视频都有自己的类别,我想在一个页面上显示每个类别中给定数量的电影。
目前,我只显示页面上的最后 5 个视频:
def home(request):
latest_videos = Video.objects.all().order_by('-date_posted')[:5]
categories = Category.objects.all()
context = {
'latest_videos': latest_videos,
#'categories': categories,
}
return render(request, 'videos/home.html', context)
我不知道如何在每个类别中显示给定数量的电影。我试图发送所有视频并在模板上查询它们,但这可能是不可能的。
有任何想法吗?我还在学习Django,但是这次我发现了一个我一整天都解决不了的问题。谢谢
解决方案
我不知道您需要在模板中显示多少个类别,但一种方法是:
def home(request):
ready_data = []
all_categories = Category.objects.prefetch_related('video_set').all() # Note that video_set is your default related query name
for _c in all_categories:
related_videos = _c.video_set.all().order_by('-date_posted')[:5]
ready_data.append({"category_id": _c.id, "category_title": _c.title, "related_videos": related_videos})
context = {
'data': ready_data
}
return render(request, 'videos/home.html', context)
您还应该将模板的这一部分更改为:
{% for d in data %}
<p> category: {{ d.category_id }}, {{ d.category_title }} </p>
{% for v in d.related_videos %}
<h3> Videos </h3>
<p> {{ v.id }}- {{v.title}} </p>
{% endfor %}
{% endfor %}
这样,您可以显示每个类别和最后 5 个相关视频。
推荐阅读
- json - Stripe 错误消息 405 -“将 .json 附加到 uri 以使用 rest api”
- regex - 正则表达式匹配 wp-content
- javascript - 是否可以检索 jQuery ajax 响应,然后通过遍历数组来添加数据的打印延迟
- angular - 为什么 addClass 不适用于 Angular 中的 DOM 元素?
- javascript - Javascript Onclick 事件自动执行
- c# - 如何在同一个测试中使用 TestCaseSource 和 TestOf 属性?
- awk - 如何使用 sed 或 awk 提取和修改 uptime 命令输出的最后一个字段
- php - 我们如何在中间件中添加多个检查以在 Laravel 中执行某些检查
- flutter - 如何从 dart 的 Object 类中的子类调用方法作为参数?
- c# - 部署数据库优先的 C# ASP.NET MVC 应用程序 - 连接到不同的数据库