python - Django For Loop循环打印数据
问题描述
我有一个按类别和班级排列的测验列表。我想使用引导描述 lsit 对齐来打印
Class XI Mathematics Quiz 1
Quiz 2
Quiz 3
Physics Quiz 3
Quiz 4
Class XII History Quiz 7
Quiz 8
使用
<dl class="row">
<dt class="col-sm-3">Class XI</dt>
<dd class="col-sm-3">Mathematics</dd>
<dd class="col-sm-3">Quiz 1</dd>
</dl>
如何使用重组编写我的 django for 循环?感谢您的帮助。
class Quiz(models.Model):
title = models.CharField(
verbose_name=_("Title"),
max_length=300, blank=False)
category = models.ForeignKey(
Category, null=True, blank=True,
verbose_name=_("Category"), on_delete=models.CASCADE)
class Category(models.Model):
category = models.CharField(verbose_name=_("Category"),max_length=250, blank=True, null=True)
class_id = models.ForeignKey(studentclass, null=True, blank=True, on_delete=models.CASCADE)
class studentclass(models.Model):
class_id= models.CharField(primary_key=True,max_length=5)
classVal =models.CharField(max_length=255, null=True, blank=True)
解决方案
首先,我们将选择所有studentclass
并使用prefetch_related
[Django docs]预取所有相关Category
和Quiz
实例。我们还可以查询所有Quiz
实例并使用select_related
[Django docs],它的好处是只查询一次数据库,但缺点是在 python 端的内存中创建了更多对象。
object_list = studentclass.objects.all().prefetch_related('category_set__quiz_set')
注意:这将变量应该在上下文中传递。
现在我们需要渲染到模板。您只想在某些内容发生更改时才显示它们。您可以为此目的使用ifchanged
模板标签:
{% for student_class in object_list %}
{% for category in student_class.category_set.all %}
{% for quiz in category.quiz_set.all %}
<dl class="row">
<dt class="col-sm-3">{% ifchanged student_class.classVal %}{{ student_class.classVal }}{% endifchanged %}</dt>
<dd class="col-sm-3">{% ifchanged student_class.classVal category.category %}{{ category.category }}{% endifchanged %}</dd>
<dd class="col-sm-3">{{ quiz.title }}</dd>
</dl>
{% endfor %}
{% endfor %}
{% endfor %}
{{ student_class.classVal }}
只有当它的值与上一次迭代相比发生了变化时,才会渲染。也{{ category.category }}
将仅在它已更改或类已更改时呈现。
注意:您可以尝试使用on和类别选择
Quiz
实例并使用 来获取它们。这完全取决于哪个查询对您更有效。order_by
category
class_id
select_related
推荐阅读
- opencv - 是否可以从已知 9 个点的单个图像校准相机?
- python - 来自带有字符串元素的嵌套迭代器/生成器的 numpy 数组
- python-3.x - Ubuntu 18.04 中 urllib.request.urlopen 的奇怪行为
- python - 在没有正则表达式的情况下获取括号中的多行数据
- git - 为什么 git 不获取我在 GitHub 中合并的拉取请求?
- c# - 如何仅获取 Kafka 主题的最新消息?
- android - 将 AdView 定位在 Fragment 的底部(ConstraintLayout + NestedScrollView)
- javascript - 如何修复我的代码以允许用户在日历上选择最多 4 个日期?
- node.js - 如何修复 grant_type 错误为 NULL - 使用 Pay Pal 的 REST API 访问令牌不支持的授权类型
- reactiveui - ReactiveUI 绑定到 DataTemplate