首页 > 解决方案 > 按字母顺序加载 JSON 文件 - Django

问题描述

使用这种方法:

def postcodes(request):
    with open('core/stores.json') as f:
        data = json.load(f)
        return JsonResponse(data, safe=False)

我将本地 json 文件加载到此 url:

urlpatterns = [
    path('stores/', views.postcodes, name='postcodes'),
]

它完美呈现,现在,我的 json 文件如下所示:

[
{
    "name": "St_Albans",
    "postcode": "AL1 2RJ"
},
{
    "name": "Hatfield",
    "postcode": "AL9 5JP"
},
{
    "name": "Worthing",
    "postcode": "BN14 9GB"
},

等等...

如您所见,如果您考虑邮政编码,这是按字母顺序排列的。

我需要的是读取这个文件,并按字母顺序呈现它,但不是按原样(按postcode),而是按name.

我认为我不能为此使用内置的 Django 循环或标签,因为它们主要使用模型或存储数据。

但我不完全确定。

有什么方法可以更快地解决这个问题,而不是将所有内容都保存到数据库中?

我看了看,serializers但那是因为django-rest-framework我在requests这里使用的是普通的。

有任何想法吗?

我现在没有使用任何模板,它只是按原样呈现在浏览器上。

标签: pythonjsondjango

解决方案


您可以使用以下命令订购列表.sort(..)

import json
from operator import itemgetter

def postcodes(request):
    with open('core/stores.json') as f:
        data = json.load(f)
    data.sort(key=itemgetter('name'))
    return JsonResponse(data, safe=False)

这会将内容呈现为:

[
    {"name": "Hatfield", "postcode": "AL9 5JP"},
    {"name": "St_Albans", "postcode": "AL1 2RJ"},
    {"name": "Worthing", "postcode": "BN14 9GB"}
]

请注意,如果您想始终按字母顺序获取邮政编码,最好简单地对stores.json文件进行排序,已经按该顺序。


推荐阅读