python - 使用 django 中的标题按字母顺序对 db 进行排序
问题描述
在 django 上编写网站:
我在数据库中有 1500 行
需要将这些行提供给前端,例如:
A Alice Andrew Ann B Bill Boris Brendan ...
现在在我的views.py中,for循环围绕名称,如果名称的第一个字母在字母表中,则该字母将添加到我的新字母表中:
for name in names:
if name[0] in alphabet:
my_alphabet.append(name[0])
my_alphabet = sorted(list(set(my_alphabet)))
然后我将我的新字母和名称转移到 html 模板:
{% for letter in my_alphabet %}
<span>{{ letter }}</span>
{% for name in names %}
{% if name.0 == letter %}
<span>{{ name }}</span>
{% endif %}
{% endfor %}
{% endfor %}
该页面加载时间长达 10 秒
也许有人有更快的变种?
感谢帮助菜鸟,抱歉浪费时间!
解决方案
内置模板标签regroup
可用于循环列表/查询集并按公共属性分组。
from django.db.models.functions import Substr
objects = MyModel.objects.order_by('name').annotate(
first_letter=Substr('name', 1, 1)
)
上面的查询集给出了MyModel
用名称字段的第一个字母注释的所有实例。然后您可以在regroup
标签中使用它
{% regroup objects by first_letter as letters %}
{% for letter in letters %}
<span>{{ letter.grouper }}</span>
{% for object in letter.list %}
<span>{{ object.name }}</span>
{% endfor %}
{% endfor %}
推荐阅读
- java - 需要帮助设置我的 (java) Odata 服务以通过 SDK 将二进制文件发送到我的 SAP 系统(更新)
- ruby-on-rails - Rails - 转储请求标头给出无法转储匿名模块
- python - Python正则表达式从字符串中获取所有图像src'
- rest - 如何使用jmeter发送多个json正文?
- python - 如何每 10 秒将数据写入文件
- php - 亚马逊通过使用 API PHP/jQuery 搜索 ASIN 获取商品详情
- javascript - 在 React Native 中的 FlatList 中延迟加载项目?
- java - Java中的版本比较
- regex - 基于缩进文本匹配的正则表达式前瞻
- git - Github - 合并被阻止 - 基础分支要求对所有提交进行签名