我有一个QuerySet,类似于:
items = Item.objects.all()项目有一个“名称”字段。在模板中,我要显示:
因此,这些物品是按第一个字母排序和分组的。漏掉的字母被省略了。有人有什么想法吗?
发布于 2010-11-11 05:57:10
这里有一个模板标记,如果您只关心它在页面上的表示。首先,在类中定义一个组织原则。在你的例子中,这是第一个字母:
class Item(models.Model):
...
def first_letter(self):
return self.name and self.name[0] or ''然后使用first_letter调用在模板中定义一个重新组:
{% regroup items by first_letter as letter_list %}
<ul>
{% for letter in letter_list %}
<li>{{ letter.grouper }}
<ul>
{% for item in letter.list %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>发布于 2012-11-26 17:29:10
只是想补充一下,如果你使用这个,你的项目有一个小写的第一个字符,它将是一个单独的组。我在上面加了一个。
return self.name and self.name.upper()[0] or ''发布于 2014-05-25 15:35:57
或者,您可以在模板中使用slice内联,而无需在模型上使用first_letter方法。
{% regroup items by name|slice:":1" as letter_list %}
<ul>
{% for letter in letter_list %}
<li>{{ letter.grouper }}
<ul>
{% for item in letter.list %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>https://stackoverflow.com/questions/4151631
复制相似问题