Django将多行的结果放到列表中?

时间:2017-03-09 04:22:55

标签: python html django templates

例如,我有以下模型:

class Author(models.Model):
    firstname = models.CharField(max_length=30)
    book = models.CharField(max_length=30)

我想让我的模板做一些导致下面的html的内容。因此,对于每个具有相同名字的作者,它会使用具有该名字的作者的所有书籍迭代并填充该列表。

<h3>Author First Name</h3>
<ul>
    <li>Book1</li>
    <li>Book2</li>
    <li>Book3</li>
</ul>
<h3>Author First Name2</h3>
<ul>
    <li>Book4</li>
    <li>Book9</li>
</ul

我不确定如何构建允许我这样做的Django Queryset。

1 个答案:

答案 0 :(得分:0)

您可能需要在视图功能中完成部分工作。

L1 = Author.objects.all().order_by('firstname').values('firstname', 'book')

会返回记录列表。

from itertools import group_by
from operator import itemgetter

group_by(L1, itemgetter('firstname'))

将为您提供每位作者的书籍作者列表。

我们假设您将此list1传递给您的模板。然后在模板中,您可以执行以下操作:

{% for k, v in list1 %}
    <h3>{{ k }}</h3>
    <ul>
    {% for b in v %}
        <li>{{ b }}</li>
    {% endfor %}
    </ul>
{% endfor %}