如何按字母顺序对模板中的对象列表进行排序?

 拉扯作乱_991 发布于 2023-01-29 19:17

我想在Django通用显示视图ListView类中显示对象列表.并且,为了使它更漂亮,我尝试按字母顺序对其进行排序.因此,我使用内置dictsort标记对列表进行排序.

以下是我使用的代码的摘要:

{% for item in object_list|dictsort:"name" %}
  ...
{% empty %}
  ...
{% endfor %}

问题是它根据字符的ASCII值对名称进行排序,这意味着bigcaps和smallcaps的排序方式不同.这是一个例子:

Bob
Eve
alice
zoe

而且,我想要的是以下内容:

alice
Bob
Eve
zoe

我在SO中查看了文档和几个问题,没有成功.所以,如果有人有办法实现这一目标,我将非常感激.

1 个回答
  • 您需要编写一个自定义过滤器,该过滤器以小写字母排序。很简单:

    @register.filter
    def sort_lower(lst, key_name):
        return sorted(lst, key=lambda item: getattr(item, key_name).lower())
    

    但是,如果您的列表是数据库中的一组对象,则您实际上不应该在Python中对它们进行排序-您应该使数据库以所需的顺序返回。

    编辑

    您如何使用过滤器?它应与dictsort完全相同:object_list|sort_lower:"name"

    要对数据库中的查询集进行排序,可以使用该extra方法添加该字段的小写版本:

    MyModel.objects.all().extra(select={'lower_name': 'LOWER(NAME)'}, order_by='lower_name')
    

    2023-01-29 19:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有