如何创建 Django 有序列表

Posted

技术标签:

【中文标题】如何创建 Django 有序列表【英文标题】:How to create an Django ordered list 【发布时间】:2020-05-20 18:49:14 【问题描述】:

我有以下型号:

class Instrument(MPTTModel):
    name = models.CharField(max_length=100, null=True, blank=True)
    category = models.CharField(max_length=100, null=True, blank=True)

表格如下所示:

name   | category |
---------------------
violin | string   |
viola  | string   |
flute  | woodwind |
oboe   | woodwind |
trumpet| brass    |

我想在我的模板中输出一个有序列表,例如:

   String: 
     Violin
     Viola
   Woodwind:
     flute
     oboe
   Brass:
     trumpet

查询 Instrument 对象后,是否有一种简单的方法来显示它?

【问题讨论】:

我在您想要的输出中没有看到任何“特定排序逻辑”。我错过了什么吗? 【参考方案1】:

您可以使用defaultdict 来累积每个类别的乐器名称列表。

在你看来:

from collections import defaultdict
instruments_by_category = defaultdict(list)

for instrument in Instrument.objects.all().values('name', 'category'):
    instruments_by_category[instrument["category"]].append(instrument["name"])

在您的模板中:

% for category, names in instruments_by_category.items %
   category :
  % for name in names %
     name 
  % endfor %
% endfor %

你可以找出 html 来获得你想要的布局。

【讨论】:

我不断收到错误。 Instruments_by_category[instrument["category"]].append(instrument["name"]) 我得到以下输出: defaultdict(, 'instrument__category': ['instrument__name', 'instrument__name', 'instrument__name', 'instrument__name', 'instrument__name', '仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称','仪器__名称']) Instrument.objects.all().values('name', 'category') 的输出是什么?

以上是关于如何创建 Django 有序列表的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单中的有序列表表单值

在HBulider中如何快速的生成有序(ol)和无序(ul)列表

无序列表<ul>和有序列表<ol>

有序列表

一日一技:在 Python 里面如何合并多个有序列表并使得结果依然有序?

Summernote - 有序和无序列表的自定义下拉列表